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


Posted in Javascript onJuly 02, 2014

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 { //其他的方法 
} 
}
Javascript 相关文章推荐
Mootools 1.2教程 滑动效果(Slide)
Sep 15 Javascript
跟着JQuery API学Jquery 之二 属性
Apr 09 Javascript
Javascript中获取出错代码所在文件及行数的代码
Sep 23 Javascript
基于jquery的多功能软键盘插件
Jul 25 Javascript
javascript中定义私有方法说明(private method)
Jan 27 Javascript
Egret引擎开发指南之发布项目
Sep 03 Javascript
javascript组合使用构造函数模式和原型模式实例
Jun 04 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
Apr 26 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
Dec 13 Javascript
JavaScript实现星级评分
Jan 12 Javascript
angular ng-model 无法获取值的处理方法
Oct 02 Javascript
微信小程序后端(java)开发流程的详细步骤
Nov 13 Javascript
jquery.validate.js插件使用经验记录
Jul 02 #Javascript
escape编码与unescape解码汉字出现乱码的解决方法
Jul 02 #Javascript
js获取IP地址的方法小结
Jul 01 #Javascript
jQuery截取指定长度字符串的实现原理及代码
Jul 01 #Javascript
原生js事件的添加和删除的封装
Jul 01 #Javascript
jQuery的:parent选择器定义和用法
Jul 01 #Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
Jul 01 #Javascript
You might like
set_include_path在win和linux下的区别
2008/01/10 PHP
php 利用socket发送GET,POST请求的实例代码
2020/07/04 PHP
JS backgroundImage控制
2009/05/19 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
JQuery在页面中添加和除移DOM示例代码
2013/06/24 Javascript
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
jQuery实现两个select控件的互移操作
2016/12/22 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
JS实现图片懒加载(lazyload)过程详解
2020/04/02 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
python hough变换检测直线的实现方法
2019/07/12 Python
python [:3] 实现提取数组中的数
2019/11/27 Python
python中Ansible模块的Playbook的具体使用
2020/05/28 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
金智子午JAVA面试题
2015/09/04 面试题
六年级数学教学反思
2014/02/03 职场文书
技术总监管理职责范本
2014/03/06 职场文书
外贸采购员岗位职责
2014/03/08 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
爱国主义教育演讲稿
2014/08/26 职场文书
教师自我剖析材料(四风问题)
2014/09/30 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
慰问信格式
2015/02/14 职场文书
2015年导购员工作总结
2015/04/25 职场文书
党员转正大会主持词
2015/07/02 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技