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 相关文章推荐
编辑浪子版表单验证类
May 12 Javascript
html 锁定页面(js遮罩层弹出div效果)
Oct 27 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
Nov 21 Javascript
javascript中全局对象的isNaN()方法使用介绍
Dec 19 Javascript
JavaScript导出Excel实例详解
Nov 25 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
Mar 13 Javascript
JavaScript图像延迟加载库Echo.js
Apr 05 Javascript
浅谈jQuery添加的HTML,JS失效的问题
Oct 05 Javascript
原生js实现鼠标跟随效果
Feb 28 Javascript
ionic使用angularjs表单验证(模板验证)
Dec 12 Javascript
webpack优化之代码分割与公共代码提取详解
Nov 22 Javascript
通过javascript实现扫雷游戏代码实例
Feb 09 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
PHP 5.0对象模型深度探索之对象复制
2008/03/27 PHP
php表单转换textarea换行符的方法
2010/09/10 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
js简单实现交换Li的值
2014/05/22 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
js禁止页面刷新与后退的方法
2015/06/08 Javascript
jquery实现定时自动轮播特效
2015/12/10 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
javascript编程开发中取色器及封装$函数用法示例
2017/08/09 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
python多线程http下载实现示例
2013/12/30 Python
python实现音乐下载器
2018/04/15 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
Python requests获取网页常用方法解析
2020/02/20 Python
css3实现可拖动的魔方3d效果
2019/05/07 HTML / CSS
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
采用怎样的方法保证数据的完整性
2013/12/02 面试题
小学生元旦广播稿
2014/02/21 职场文书
募捐倡议书
2014/04/14 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
会计求职自荐信
2014/06/20 职场文书
爱的教育读书笔记
2015/06/26 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS