如果在ECMAScript中定义了两个相同名字的函数,那么后定义的函数则覆盖先定义的函数。例:
function add(num){
return num + 10;
}
function add(num) {
return num + 20;
}
var result=add(10);
alert(result); //结果为30
那么,如何利用arguments对象实现函数重载呢?
首先,arguments对象是什么?
arguments对象是类数组,可以使用方括号语法访问它的每一个元素(即第一个元素是arguments[0]…以此类推),通过访问arguments对象的 length属性可以获知有多少个参数(实参)传递给了函数;它的值永远与对应命名参数(形参)的值保持同步,但形参与实参的内存空间并不会重叠,因为arguments对象的长度是由传入的参数个数决定的,而不是由定义函数时的命名参数的个数决定的。
接下来,arguments对象怎样实现重载?
例:
function add(){
if(arguments.length == 1){
alert(arguments[0] + 10);
}else if(arguments.length == 2){
alert(arguments[0] + arguments[1]);
}
}
add(10); //结果为20
add(10,30); //结果为40
arguments对象通过检查传入函数中参数的类型和个数,并作出不同的反应,来实现方法的重载。