如何实现JS函数的重载


Posted in Javascript onSeptember 22, 2006

javascript不能支持函数的重载,如下:

<script language="JavaScript"> 
function f(length) 
{ 
    alert("高为:"+length); 
} function f(length,width) 
{ 
    alert("高为:"+length+",宽为:"+width); 
} 
</srcipt>

上面那段代码其实是行不通的,因为函数定义时的参数个数和函数调用时的参数个数没有任何关系。 在函数中可以用f.arguments[0]和f.arguments[1]得到调用时传入的第一和第二个参数,所以定义function(length),后面用f(10,10)调用是没有问题的。所以在上面这段代码中,第二个函数是永远不可能被调用到的,那么,要怎样才能实现像函数重载那样的功能呢?
    那就是在函数定义中用f.arguments.length判断一下调用时传入的参数个数。然后对不同的情况采用不同的处理方式。
如下:
<script language="JavaScript"> 
function f() 
{ 
    var len= arguments.length; 
    if(1 == len) 
    { 
        var length = arguments[0]; 
        var width = arguments[1]; 
        f2(length,width); 
    } 
    else 
    { 
        var length = arguments[0]; 
        f1(length); 
    } 
} function f1(length) 
{ 
    alert("高为:"+length); 
} 
function f2(length,width) 
{ 
    alert("高为:"+length+",宽为:"+width); 
} 
</srcipt>

这样,你就可以给函数f()传入一个参数也可以传入两个参数了,比如f(10)和f(10,10);
    个人觉得,这样虽然可以实现重载,但也不是很好用,我们可以根据具体情况在一个函数中实现重载,如果要重载的两个函数相差较大,那就保留两个函数,而如果两个函数的实现基本差不多,那么可以在一个函数中进行判断,处理不同的部分,而不需要像上面那样写成三个函数,如下:
<script language="JavaScript"> 
function f(length) 
{ 
    var len= arguments.length; 
    if(1 == len) 
    { 
        var width = arguments[1]; 
        alert("高为:"+length+",宽为:"+width); 
    } 
    else 
    { 
        alert("高为:"+length); 
    } 
} 
</srcipt>
Javascript 相关文章推荐
jquery 弹出层注册页面等(asp.net后台)
Jun 17 Javascript
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
Feb 23 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
Mar 03 Javascript
javascript包装对象实例分析
Mar 27 Javascript
JavaScript实现级联菜单的方法
Jun 29 Javascript
GOJS+VUE实现流程图效果
Dec 01 Javascript
JavaScript递归函数定义与用法实例分析
Jan 24 Javascript
vue搜索和vue模糊搜索代码实例
May 07 Javascript
使用layui定义一个模块并使用的例子
Sep 14 Javascript
js+canvas实现两张图片合并成一张图片的方法
Nov 01 Javascript
JavaScript This指向问题详解
Nov 25 Javascript
JavaScript实现简单计时器
Jun 22 Javascript
扩展String功能方法
Sep 22 #Javascript
js实现ASP分页函数 HTML分页函数
Sep 22 #Javascript
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
Sep 22 #Javascript
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
Sep 22 #Javascript
prototype1.4中文手册
Sep 22 #Javascript
prototype 源码中文说明之 prototype.js
Sep 22 #Javascript
showModelessDialog()使用详解
Sep 21 #Javascript
You might like
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
js控制表单操作的常用代码小结
2013/08/15 Javascript
jQuery大于号(&gt;)选择器的作用解释
2015/01/13 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
chrome调试javascript详解
2015/10/21 Javascript
JS修改地址栏参数实例代码
2016/06/14 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
微信小程序 常用工具类详解及实例
2017/02/15 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
Angular+ionic实现折叠展开效果的示例代码
2020/07/29 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
python的类变量和成员变量用法实例教程
2014/08/25 Python
python读取LMDB中图像的方法
2018/07/02 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
python3.7环境下安装Anaconda的教程图解
2019/09/10 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
Linux面试经常问的文件系统操作命令
2016/10/04 面试题
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
大学生大二自我鉴定
2013/10/28 职场文书
车工岗位职责
2013/11/26 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
社会治安综合治理责任书
2015/01/29 职场文书
天坛导游词
2015/02/02 职场文书
业务员管理制度范本
2015/08/06 职场文书