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的一些总结
Nov 03 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
Apr 26 Javascript
js检验密码强度(低中高)附图
Jun 05 Javascript
JavaScript基础篇(6)之函数表达式闭包
Dec 11 Javascript
IScroll5 中文API参数说明和调用方法
May 21 Javascript
Bootstrap的popover(弹出框)2秒后定时消失的实现代码
Feb 27 Javascript
基于BootStrap的前端分页带省略号和上下页效果
May 18 Javascript
浅谈react+es6+webpack的基础配置
Aug 09 Javascript
Node层模拟实现multipart表单的文件上传示例
Jan 02 Javascript
安装vue-cli的简易过程
May 22 Javascript
你了解vue3.0响应式数据怎么实现吗
Jun 07 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
Sep 27 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.NET的入门教程
2006/10/09 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
ThinkPHP3.1新特性之命名范围的使用
2014/06/19 PHP
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
JavaScript执行效率与性能提升方案
2012/12/21 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
Javascript判断图片尺寸大小实例分析
2014/06/16 Javascript
超级好用的jQuery圆角插件 Corner速成
2014/08/31 Javascript
JS判断网页广告是否被浏览器拦截过滤的代码
2015/04/05 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
php 修改密码实现代码
2017/05/24 Javascript
javascript实现点亮灯泡特效示例
2019/10/15 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
Vue实现随机验证码功能
2020/12/29 Vue.js
[01:51]开启你的城市传奇 完美世界城市挑战赛开始报名
2018/10/09 DOTA
Sanic框架应用部署方法详解
2018/07/18 Python
python实现简单图片物体标注工具
2019/03/18 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
Django中ORM的基本使用教程
2020/12/22 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
办公设备采购方案
2014/03/16 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
户籍证明模板
2014/09/28 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
Redis IP地址的绑定的实现
2021/05/08 Redis
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android