JS模拟重载
大家都知道,JS是没重载的,如果给JS定义了一个函数,再定义一个同名函数,结果只是后者把前者覆盖了。
关于重载,我的理解:就是给一个函数写两个定义,但给两个定义传递的参数的类型和数量不一样。
但是JS函数中的参数是很有个性的(哈哈),JS的解析器不会管参数那么多,管你有没有参数,也不管参数有多少。因为ECMAScript中解释JS中的参数其实是用一个数组来表示的,函数在接收参数的时候始终接收的是这个数组,其它的就不管了。
正因为这样,我们便可以用arguments对象来访问函数中的所传递的参。
如:arguments[0]
是第一个参数,arguments[1]
则是第二个参数。
所以,JS特殊的参数机制导致JS是不可能有重载的,因为JS解析器根本不鸟参数,就别说什么参数类型,参数数量了。
但可以模拟重载(只是模拟),不说了,上代码:
function helloWorld(){
if(arguments[1]){
alert(arguments[0]+"##"+arguments[1]);
}else{
alert(arguments[0]+"##Hello");
}
}
helloWorld(1,2); //1##2
helloWorld(1,2,3,4); //1##2
helloWorld(2); //2##Hello
helloWorld(); //undefined##Hello
helloWorld(3,) //语法错误
最后再说一句:JS传参传的都是值,不传引用!这个下次再写!