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 相关文章推荐
Three.js源码阅读笔记(物体是如何组织的)
Dec 27 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
Aug 12 Javascript
论JavaScript模块化编程
Mar 07 Javascript
基于jquery实现轮播特效
Apr 22 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
May 11 Javascript
Node.js检测端口(port)是否被占用的简单示例
Sep 29 Javascript
详解angularjs结合pagination插件实现分页功能
Feb 10 Javascript
微信小程序使用gitee进行版本管理
Sep 20 Javascript
在vue中解决提示警告 for循环报错的方法
Sep 28 Javascript
webpack4手动搭建Vue开发环境实现todoList项目的方法
May 16 Javascript
基于jQuery实现可编辑的表格
Dec 11 jQuery
原生javascript制作贪吃蛇小游戏的方法分析
Feb 26 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图片上传类带图片显示
2006/11/25 PHP
PHP字符串处理的10个简单方法
2010/06/30 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
Jquery 的outerHeight方法使用介绍
2013/09/11 Javascript
javascript arguments使用示例
2014/12/16 Javascript
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
jQuery插件ajaxFileUpload使用实例解析
2016/10/19 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
一个Vue页面的内存泄露分析详解
2018/06/25 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
不要用强制方法杀掉python线程
2017/02/26 Python
python PyTorch预训练示例
2018/02/11 Python
python实现音乐下载器
2018/04/15 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
Python3多目标赋值及共享引用注意事项
2019/05/27 Python
Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError
2019/12/20 Python
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
搞笑的爱情检讨书
2014/10/01 职场文书
师范生见习总结范文
2015/06/23 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL