首页 > 代码库 > js面向对象编程:怎样实现方法重载

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   {   //其它的方法  
                    } 
                }


js面向对象编程:怎样实现方法重载