js中方法重载如何实现?以及函数的参数问题


Posted in Javascript onAugust 01, 2013

都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的方法都被覆盖掉了。

但每一个函数都有一个特殊的参数arguments,利用它可以实现方法的重载。

例如:

function Add(firstnumber,sencondnumber) { 
return firstnumber+sencondnumber; 
}

只能处理两个参数,如果有多个参数,或者没有参数,一个参数的情况都是处理不了的。如果没有传递参数,则firstnumber,sencondnumber都是未定义的,如果传递了一个参数,就相当于只给firstnumber赋值了,sencondnumber依然是未定义。相反如果传递了多于两个的参数,则相当于firstnumber,sencondnumber都赋值了,虽然还有其他的参数,但处理时都忽略掉了。如果能获取其他的参数,自然就可以处理了。此时应该就可以想到函数的特殊参数arguments,这个包含了传递给函数的所有参数,利用它就可以实现方法重载的效果。

以上的方法修改如下:

function Add(firstnumber,sencondnumber) { 
if (arguments.length == 0)//没有传递参数 
{ 
return null; 
} 
else if (arguments.length == 1) {//传递的是一个参数 
return firstnumber;//也可以写为 return arguments[0]; 
} 
else if(arguments.length == 2)//传递的是两个参数 
{ return firstnumber+sencondnumber;//也可以写为 return arguments[0]+arguments[1]; 
} 
else { 
var total=0; 
for (var i = 0; i < arguments.length; i++) { 
total=total+arguments[i] 
} 
return total; 
} 
}

当然这种方法的弊端就是参数的顺序不能打乱,如果函数实现依赖于参数的顺序,就必须进行特殊处理,例如传递null来占位。

由于传递给函数的参数是严格按照定义函数的顺序给每一个参数赋值的,如果只想给第二个参数赋值,则必须传递两个参数,否则实际上传递的值赋值给了第一个参数,并没有赋值给第二个参数。

例如只想给sencondnumber传值,但不想给firstnumber传值,必须这样调用Add(null,2)(当然函数内部必须处理传递特殊值的情况),如果这样调用Add(2),其实是给firstnumber传值了,相当于调用了传递了一个参数的情况。

Javascript 相关文章推荐
指定位置如果有图片显示图片,无图片显示广告的JS
Jun 05 Javascript
通过jquery的$.getJSON做一个跨域ajax请求试验
May 03 Javascript
上传的js验证(图片/文件的扩展名)
Apr 25 Javascript
js 走马灯简单实例
Nov 21 Javascript
js实现通用的微信分享组件示例
Mar 10 Javascript
javascript中的括号()用法小结
Apr 14 Javascript
js的touch事件的实际引用
Oct 13 Javascript
JavaScript获取键盘按键的键码(参照表)
Jan 10 Javascript
Bootstrap DateTime Picker日历控件简单应用
Mar 25 Javascript
echarts大屏字体自适应的方法步骤
Jul 12 Javascript
JS如何定义用字符串拼接的变量
Jul 11 Javascript
Ant design vue中的联动选择取消操作
Oct 31 Javascript
子窗体与父窗体传值示例js代码
Aug 01 #Javascript
根据选择不同的下拉值出现相对应的文本输入框
Aug 01 #Javascript
jquery图片放大功能简单实现
Aug 01 #Javascript
基于jquery的文章中所有图片width大小批量设置方法
Aug 01 #Javascript
Jquery动态更改一张位图的src与Attr的使用
Jul 31 #Javascript
jquery中选择块并改变属性值的方法
Jul 31 #Javascript
JQuery写动态树示例代码
Jul 31 #Javascript
You might like
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
js判断为空Null与字符串为空简写方法
2014/02/24 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
Layui数据表格之获取表格中所有的数据方法
2018/08/20 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
简单谈谈python基本数据类型
2018/09/26 Python
Python os.access()用法实例
2019/02/18 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
pandas分组聚合详解
2020/04/10 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
HTML5移动开发图片压缩上传功能
2016/11/09 HTML / CSS
世界第一曲奇连锁店:Mrs. Fields Cookies
2017/02/04 全球购物
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
生物化工工艺专业应届生求职信
2013/10/08 职场文书
村容村貌整治方案
2014/05/21 职场文书
学习考察心得体会
2014/09/04 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
PyTorch 如何自动计算梯度
2021/05/23 Python
总结python多进程multiprocessing的相关知识
2021/06/29 Python