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 相关文章推荐
Ajax一统天下之Dojo整合篇
Mar 24 Javascript
Js获取图片原始宽高的实现代码
May 17 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
Aug 01 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
Nov 27 Javascript
jquery Ajax 全局调用封装实例详解
Jan 16 Javascript
Node调用Java的示例代码
Sep 20 Javascript
Node.js中的child_process模块详解
Jun 08 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
Sep 28 Javascript
JavaScript实现的拼图算法分析
Feb 13 Javascript
JS内置对象和Math对象知识点详解
Apr 03 Javascript
vue组件添加事件@click.native操作
Oct 30 Javascript
微信小程序实现页面左右滑动
Nov 16 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
SONY ICF-F10中波修复记
2021/03/02 无线电
linux php mysql数据库备份实现代码
2009/03/10 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
yii实现model添加默认值的方法(2种方法)
2016/01/06 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
php数据结构之顺序链表与链式线性表示例
2018/01/22 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
JavaScript 获得选中文本内容的方法
2009/02/15 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
关于javascript event flow 的一个bug详解
2013/09/17 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
详解js的延迟对象、跨域、模板引擎、弹出层、AJAX【附实例下载】
2016/12/19 Javascript
JS获取多维数组中相同键的值实现方法示例
2017/01/06 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
vue 添加vux的代码讲解
2017/11/30 Javascript
vue2.0页面前进刷新回退不刷新的实现方法
2018/07/31 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
[30:51]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第一局
2016/03/04 DOTA
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
python使用fork实现守护进程的方法
2017/11/16 Python
Python实现返回数组中第i小元素的方法示例
2017/12/04 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
Python中函数参数匹配模型详解
2019/06/09 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
2014年财务部工作总结
2014/11/11 职场文书
2014年办公室工作总结范文
2014/11/12 职场文书
稽核岗位职责
2015/02/10 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
导游词之潮音寺
2019/09/26 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript