js面向对象编程:怎样实现方法重载
js中怎样实现方法重载?这涉及到三个问题
1同名函数的调用问题
2函数中特殊的參数arguments
3怎样利用arguments实现方法重载
1同名函数的调用问题
都知道在js中假设存在多个名称同样的函数,则调用实际每次都仅仅使用最后一个,js事实上是没有重载的。也就是说。假设定义了多个同名的函数,单參数不一样,在调用时,js无论參数个数,仅仅管前后顺序
比如:
function test1(arg1) { alert("參数1:"+arg1); } function test1(arg1,arg2,arg3) { alert("參数1:"+arg1+"參数2:"+arg2+"參数3:"+arg3); } //測试代码 function test(){ test1("1") }
尽管我们调用的是test1("1")。传递了一个參数,但实际调用的却是test1(arg1,arg2,arg3)。并没有由于我们传递了一个參数。而调用仅仅有一个參数的方法。
2函数中特殊的參数arguments
假设我们使用例如以下的代码
function test1(arg1,arg2,arg3) { alert("參数1:"+arg1+"參数2:"+arg2+"參数3:"+arg3); } function test1(arg1) { alert("參数1:"+arg1); } //測试代码 function test(){ test1("1"。"2") }我们知道调用的始终是test1(arg1),也就是仅仅有一个參数的函数,但怎样获取传递的其它參数呢?
这就要用到函数中特殊的參数arguments。arguments包括了全部传递给函数的參数
function test1() { var text=""; for(var i=0;i<arguments.length;i++){ text+="參数"+i+":"+arguments[i]; } alert(text); } //測试代码 function test(){ test1("1"); test1("1"。"2"); test1("1"。"2","3"); }
经过測试发现,arguments包括了传递给函数的全部參数,而且arguments.length依据实际传递參数的个数的不同而不同,arguments.length代表了实际传递给函数參数的个数。
3怎样在js中实现函数的重载?
经过以上的測试发现。在js中不能直接实现函数的重载。但有没有办法实现类似重载效果的方法呢?
能够。主要就是利用arguments
比如:
function test1() { var text=""; if(arguments.length==1) { //调用一个參数的方法 } else if(arguments.length==2) { //调用两个參数的方法 } else { //其它的方法 } }