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 相关文章推荐
Jquery 表单取值赋值的一些基本操作
Oct 11 Javascript
Javascript学习笔记2 函数
Jan 11 Javascript
jQuery下实现等待指定元素加载完毕(可改成纯js版)
Jul 11 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
Jan 24 Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 Javascript
使用struts2+Ajax+jquery验证用户名是否已被注册
Mar 22 Javascript
详解javascript表单的Ajax提交插件的使用
Dec 29 Javascript
Javascript中构造函数要注意的一些坑
Jan 23 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
Mar 21 Javascript
Vue.set()实现数据动态响应的方法
Feb 07 Javascript
LayUi使用switch开关,动态的去控制它是否被启用的方法
Sep 21 Javascript
Javascript新手入门之字符串拼接与变量的应用
Dec 03 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 三维饼图的实现代码
2008/09/28 PHP
php foreach、while性能比较
2009/10/15 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
2016/06/30 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
2016/12/23 PHP
thinkPHP5.0框架事务处理操作简单示例
2018/09/07 PHP
利用js制作html table分页示例(js实现分页)
2014/04/25 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
通过webpack引入第三方库的方法
2018/07/20 Javascript
bootstrap table实现横向合并与纵向合并
2019/07/18 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
[02:31]2018年度DOTA2最具人气选手-完美盛典
2018/12/16 DOTA
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
利用python爬取斗鱼app中照片方法实例
2017/12/03 Python
Python使用functools实现注解同步方法
2018/02/06 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
python logging 重复写日志问题解决办法详解
2020/08/04 Python
Python 随机按键模拟2小时
2020/12/30 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
土耳其时尚购物网站:Morhipo
2017/09/04 全球购物
西班牙床垫网上商店:Colchones.es
2018/05/06 全球购物
什么是岗位职责
2013/11/12 职场文书
应届毕业生自荐书
2014/06/18 职场文书
另类冲刺标语
2014/06/24 职场文书
百年孤独读书笔记
2015/06/29 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
导游词之天下银坑景区
2019/11/21 职场文书
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL
Django框架中模型的用法
2022/06/10 Python