html5中文学习网

您的位置: 首页 > 网站及特效实例 > javascript特效 » 正文

js面向对象编程之如何实现方法重载_javascript技巧_

[ ] 已经帮助:人解决问题

js中如何实现方法重载?这涉及到三个问题FkpHTML5中文学习网 - HTML5先行者学习网

1.同名函数的调用问题FkpHTML5中文学习网 - HTML5先行者学习网

2.函数中特殊的参数argumentsFkpHTML5中文学习网 - HTML5先行者学习网

3.如何利用arguments实现方法重载FkpHTML5中文学习网 - HTML5先行者学习网

1、同名函数的调用问题FkpHTML5中文学习网 - HTML5先行者学习网

都知道在js中如果存在多个名称相同的函数,则调用实际每次都只使用最后一个,js其实是没有重载的,也就是说,如果定义了多个同名的函数,单参数不一样,在调用时,js不管参数个数,只管前后顺序FkpHTML5中文学习网 - HTML5先行者学习网

例如:FkpHTML5中文学习网 - HTML5先行者学习网

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),并没有因为我们传递了一个参数,而调用只有一个参数的方法。FkpHTML5中文学习网 - HTML5先行者学习网

2、函数中特殊的参数argumentsFkpHTML5中文学习网 - HTML5先行者学习网

如果我们使用如下的代码FkpHTML5中文学习网 - HTML5先行者学习网
FkpHTML5中文学习网 - HTML5先行者学习网

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),也就是只有一个参数的函数,但如何获取传递的其他参数呢?FkpHTML5中文学习网 - HTML5先行者学习网

这就要用到函数中特殊的参数arguments,arguments包含了所有传递给函数的参数FkpHTML5中文学习网 - HTML5先行者学习网

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代表了实际传递给函数参数的个数。FkpHTML5中文学习网 - HTML5先行者学习网

3、如何在js中实现函数的重载?FkpHTML5中文学习网 - HTML5先行者学习网

经过以上的测试发现,在js中不能直接实现函数的重载,但有没有办法实现类似重载效果的方法呢?FkpHTML5中文学习网 - HTML5先行者学习网

可以,主要就是利用argumentsFkpHTML5中文学习网 - HTML5先行者学习网

例如:FkpHTML5中文学习网 - HTML5先行者学习网

function test1() { var text=""; if(arguments.length==1) { //调用一个参数的方法 } else if(arguments.length==2) { //调用两个参数的方法 } else { //其他的方法 } }
(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助