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中字符替换函数String.replace()使用技巧
Aug 14 Javascript
js 页面元素的几个用法总结
Nov 18 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
Jun 10 Javascript
JavaScript中发布/订阅模式的简单实例
Nov 05 Javascript
jQuery 监控键盘一段时间没输入
Apr 22 Javascript
Javascript操作表单实例讲解(下)
Jun 20 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
Oct 10 Javascript
JS实现数组按升序及降序排列的方法
Apr 26 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
May 08 Javascript
详解vue-cli3开发Chrome插件实践
May 29 Javascript
React学习之JSX与react事件实例分析
Jan 06 Javascript
给原生html中添加水印遮罩层的实现示例
Apr 02 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
融入意大利的咖啡文化
2021/03/03 咖啡文化
计数器详细设计
2006/10/09 PHP
PHP+AJAX实现无刷新注册(带用户名实时检测)
2006/12/02 PHP
Dedecms常用函数解析
2008/02/01 PHP
非常好用的Zend Framework分页类
2014/06/25 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
PHP处理Ajax请求与Ajax跨域问题
2017/02/13 PHP
总结PHP内存释放以及垃圾回收
2018/03/29 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
2011/10/19 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
angularjs 处理多个异步请求方法汇总
2015/01/06 Javascript
JavaScript中原型和原型链详解
2015/02/11 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
2019/09/23 Javascript
node.js通过Sequelize 连接MySQL的方法
2020/12/28 Javascript
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
用python实现面向对像的ASP程序实例
2014/11/10 Python
简单介绍Ruby中的CGI编程
2015/04/10 Python
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
Python代码打开本地.mp4格式文件的方法
2019/01/03 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
python 伯努利分布详解
2020/02/25 Python
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
护理学应聘自荐书范文
2014/02/05 职场文书
护理专科毕业自荐信范文
2014/04/21 职场文书
办公室岗位职责
2015/02/04 职场文书
正规欠条模板
2015/07/03 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis