js中没有办法直接实现方法重载
但每一个函数都有一个特殊的参数arguments
利用它可以实现方法的重载
具体示例如下
都知道在js中没有办法直接实现方法重载因为在js中如果定义了多个名称相同但参数个数不一样的方法其实只有最后一个方法能被真正调用其他的方法都被覆盖掉了
但每一个函数都有一个特殊的参数arguments利用它可以实现方法的重载
例如
复制代码 代码如下:
function Add(firstnumber
sencondnumber) {
return firstnumber+sencondnumber;
}
只 能处理两个参数如果有多个参数或者没有参数一个参数的情况都是处理不了的如果没有传递参数则 firstnumbersencondnumber都是未定义的如果传递了一个参数就相当于只给firstnumber赋值 了sencondnumber依然是未定义相反如果传递了多于两个的参数则相当于firstnumbersencondnumber都赋值了虽 然还有其他的参数但处理时都忽略掉了如果能获取其他的参数自然就可以处理了此时应该就可以想到函数的特殊参数arguments这个包含了传递 给函数的所有参数利用它就可以实现方法重载的效果
以上的方法修改如下
复制代码 代码如下:
function Add(firstnumber
sencondnumber) {
if (arguments
length ==
)//没有传递参数
{
return null;
}
else if (arguments
length ==
) {//传递的是一个参数
return firstnumber;//也可以写为 return arguments[
];
}
else if(arguments
length ==
)//传递的是两个参数
{
return firstnumber+sencondnumber;//也可以写为 return arguments[
]+arguments[
];
}
else {
var total=
;
for (var i =
; i < arguments
length; i++) {
total=total+arguments[i]
}
return total;
}
}
当然这种方法的弊端就是参数的顺序不能打乱如果函数实现依赖于参数的顺序就必须进行特殊处理例如传递null来占位
由于传递给函数的参数是严格按照定义函数的顺序给每一个参数赋值的如果只想给第二个参数赋值则必须传递两个参数否则实际上传递的值赋值给了第一个参数并没有赋值给第二个参数
例如只想给sencondnumber传值但不想给firstnumber传值必须这样调用Add(null)(当然函数内部必须处理传递特殊值的情况)如果这样调用Add()其实是给firstnumber传值了相当于调用了传递了一个参数的情况