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面向对象编程:如何实现方法重载,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。