手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >js中方法重载如何实现?以及函数的参数问题
js中方法重载如何实现?以及函数的参数问题
摘要:都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的...

都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的方法都被覆盖掉了。

但每一个函数都有一个特殊的参数arguments,利用它可以实现方法的重载。

例如:

复制代码 代码如下:

function Add(firstnumber,sencondnumber) {

return firstnumber+sencondnumber;

}

只能处理两个参数,如果有多个参数,或者没有参数,一个参数的情况都是处理不了的。如果没有传递参数,则firstnumber,sencondnumber都是未定义的,如果传递了一个参数,就相当于只给firstnumber赋值了,sencondnumber依然是未定义。相反如果传递了多于两个的参数,则相当于firstnumber,sencondnumber都赋值了,虽然还有其他的参数,但处理时都忽略掉了。如果能获取其他的参数,自然就可以处理了。此时应该就可以想到函数的特殊参数arguments,这个包含了传递给函数的所有参数,利用它就可以实现方法重载的效果。

以上的方法修改如下:

复制代码 代码如下:

function Add(firstnumber,sencondnumber) {

if (arguments.length == 0)//没有传递参数

{

return null;

}

else if (arguments.length == 1) {//传递的是一个参数

return firstnumber;//也可以写为 return arguments[0];

}

else if(arguments.length == 2)//传递的是两个参数

{

return firstnumber+sencondnumber;//也可以写为 return arguments[0]+arguments[1];

}

else {

var total=0;

for (var i = 0; i < arguments.length; i++) {

total=total+arguments[i]

}

return total;

}

}

当然这种方法的弊端就是参数的顺序不能打乱,如果函数实现依赖于参数的顺序,就必须进行特殊处理,例如传递null来占位。

由于传递给函数的参数是严格按照定义函数的顺序给每一个参数赋值的,如果只想给第二个参数赋值,则必须传递两个参数,否则实际上传递的值赋值给了第一个参数,并没有赋值给第二个参数。

例如只想给sencondnumber传值,但不想给firstnumber传值,必须这样调用Add(null,2)(当然函数内部必须处理传递特殊值的情况),如果这样调用Add(2),其实是给firstnumber传值了,相当于调用了传递了一个参数的情况。

【js中方法重载如何实现?以及函数的参数问题】相关文章:

解决未知尺寸的图片撑破页面的问题

js实现精美的图片跟随鼠标效果实例

JQuery使用index方法获取Jquery对象数组下标的方法

JS和css实现检测移动设备方向的变化并判断横竖屏幕

js实现顶部可折叠的菜单工具栏效果实例

javascript自定义右键弹出菜单实现方法

Java数据类型以及变量的定义

js实现发送验证码后的倒计时功能

一个表格收缩展开的函数

在JS方法中返回多个值的方法汇总

精品推荐
分类导航