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 相关文章推荐
Javascript Select操作大集合
May 26 Javascript
简单实用的js调试logger组件实现代码
Nov 20 Javascript
jquery动态更换设置背景图的方法
Mar 25 Javascript
jQuery实现背景滑动菜单
Dec 02 Javascript
微信小程序 input输入框详解及简单实例
Jan 10 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
Feb 19 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
Jul 11 Javascript
vue中appear的用法
Aug 17 Javascript
VUE 使用中踩过的坑
Feb 08 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
Jul 10 Javascript
微信小程序实现日历效果
Dec 28 Javascript
详解Vue中CSS样式穿透问题
Sep 12 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
PHP动态分页函数,PHP开发分页必备啦
2011/11/07 PHP
php中用加号与用array_merge合并数组的区别深入分析
2013/06/03 PHP
Jquery在指定DIV加载HTML示例代码
2014/02/17 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
2017/03/09 Javascript
jQuery修改DOM结构_动力节点Java学院整理
2017/07/05 jQuery
JS实现select选中option触发事件操作示例
2018/07/13 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
Redbubble法国:由独立艺术家设计的独特产品
2019/01/08 全球购物
应用服务器有那些
2012/01/19 面试题
database面试题
2013/03/28 面试题
造价工程师个人求职信
2013/09/21 职场文书
《王二小》教学反思
2014/02/27 职场文书
大学生英语演讲稿
2014/04/24 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
论文答辩开场白大全
2015/05/27 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
2016年清明节红领巾广播稿
2015/12/17 职场文书
执行力心得体会范文
2016/01/11 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android