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 相关文章推荐
javascript下有关dom以及xml节点访问兼容问题
Nov 26 Javascript
Javascript 继承机制的实现
Aug 12 Javascript
关于div自适应高度/左右高度自适应一致的js代码
Mar 22 Javascript
Jquery动态改变图片IMG的src地址示例
Jun 25 Javascript
AJAX跨域请求json数据的实现方法
Nov 11 Javascript
js实现圆盘记速表
Aug 03 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
Oct 16 Javascript
ionic 上拉菜单(ActionSheet)实例代码
Jun 06 Javascript
浅谈Javascript中的Label语句
Dec 14 Javascript
微信小程序 PHP后端form表单提交实例详解
Jan 12 Javascript
angular6开发steps步骤条组件
Jul 04 Javascript
uploadify插件实现多个图片上传并预览
Sep 30 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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
js实现可拖动DIV的方法
2013/12/17 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
jquery常用操作小结
2014/07/21 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
基于javascript的拖拽类封装详解
2019/04/19 Javascript
vuex实现数据状态持久化
2019/11/11 Javascript
vue中英文切换实例代码
2020/01/21 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python程序设计入门(4)模块和包
2014/06/16 Python
Python中字符串的常见操作技巧总结
2016/07/28 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
详解python持久化文件读写
2019/04/06 Python
python控制台实现tab补全和清屏的例子
2019/08/20 Python
Python实现名片管理系统
2020/02/14 Python
英国高级百货公司:Harvey Nichols
2017/01/29 全球购物
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
如何高效率的查找一个月以内的数据
2012/04/15 面试题
什么是View State?
2013/01/27 面试题
八年级英语教学反思
2014/01/09 职场文书
中秋节礼品促销方案
2014/02/02 职场文书
领导干部作风建设总结
2014/10/23 职场文书
家装业务员岗位职责
2015/04/03 职场文书
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python