js的函数重载
前几天在面试的时候,面试官问到了我,js的重载是什么?当时一脸懵逼,回来之后查阅资料,给大家分享一下。
js函数重载的定义,方法名相同,参数不同。
直接上代码:
function add(a,b){
var sum=a+b;
alert(sum);
}
add(1,2);
function add(a,b,c){
var sum=a+b+c;
alert(sum);
}
add(1,2,3);
观察结果,我们发现,第一个alert出来的是NaN,第二个alert出来的是6.第二个把第一个覆盖了!是不是js中没有重载,只有覆盖?在《javascript高级程序设计中》,也有说到我们的js是没有重载的。
根据重载的定义,我们发现参数不同,引用arguments来存放我们的参数是不是就可以了。
我们先来一个简单的重载
function cz(){``
switch(arguments.length){
case 0:
alert(0);
break;
case 1:
alert(1);
break;
//有arguments.length-1个case在这里执行,我们就完成了重载
}
}
接下来在我们的add方法上改造一下来实现函数重载。
function add(){
if(arguments.length===3){
alert(arguments[0]+arguments[1]+arguments[2]);
}else if(arguments.length===1){
alert(arguments[0]);
}else if(arguments.length===2){
alert(arguments[0]+arguments[1]);
}else{
alert(0)
}
}
add(1);
add(1,2);
add();
上述代码分别输出 1 3 0
在这里,我们就真正的利用arguments的特性实现了js的函数重载!!!