实现JavaScript 方法重载
1、介绍
在一个对象中多个方法名称相同,但函数的形参不同(数量、类型、顺序不同),我们将其称之为函数重载。
但在JavaScript中方法重载一般只考虑参数的数量不同,实现过程与其他的语言类型中的构造也有区别。因为JS中方法的预解析其实是通过匿名函数而来的,函数名其实和变量名是同一个作用,在同一个作用域之内只允许出现一次相同的变量名称,后面重复出现的名称会被覆盖。因此JS中的方法重载主要是通过函数的arguments属性控制的。
2、JavaScript重载实现
- 函数可以有多个实参,那么我们可以使用arguments对象来接收
- 接收以后我们根据arguments对象中的长度来判断
- 当长度不同执行的代码块就不同,那么不管传进来一个或两个都会去执行不同的分支
- 最后每个分支或方法返回一个数据即可
2、案例
this.calc=function(){
//输出arguments对象中存储的数据
console.log(arguments);
//通过判断arguents中的元素长度来选择执行哪个代码块
if(arguments.length==0){
return 0;
}else if(arguments.length==1){
return arguments[0]
}
else {
var sum=0;
for(var i=0;i<arguments.length;i++){
sum+=arguments[i];
}
return sum;
}
}
3、总结
虽然JavaScript中没有提供方法重载的机制,但是我们可以通过每个函数都自带的arguments对象来实现方法重载的功能,主要是判断arguments中的长度来执行不同的分支,最后实现方法重载。但个人觉得这个方法没有其他语言提供的函数重载机制好,所以JavaScript还有待提高。