js面向对象编程之如何实现方法重载


Posted in Javascript onJuly 02, 2014

js中如何实现方法重载?这涉及到三个问题

1.同名函数的调用问题

2.函数中特殊的参数arguments

3.如何利用arguments实现方法重载

1、同名函数的调用问题

都知道在js中如果存在多个名称相同的函数,则调用实际每次都只使用最后一个,js其实是没有重载的,也就是说,如果定义了多个同名的函数,单参数不一样,在调用时,js不管参数个数,只管前后顺序

例如:

function test1(arg1) 
{ 
alert("参数1:"+arg1); 
} 
function test1(arg1,arg2,arg3) 
{ 
alert("参数1:"+arg1+"参数2:"+arg2+"参数3:"+arg3); 

} 
//测试代码 
function test(){ 
test1("1") 
}

 虽然我们调用的是test1("1"),传递了一个参数,但实际调用的却是test1(arg1,arg2,arg3),并没有因为我们传递了一个参数,而调用只有一个参数的方法。

2、函数中特殊的参数arguments

如果我们使用如下的代码

function test1(arg1,arg2,arg3) 
{ 
alert("参数1:"+arg1+"参数2:"+arg2+"参数3:"+arg3); 

} 
function test1(arg1) 
{ 
alert("参数1:"+arg1); 
} 
//测试代码 
function test(){ 
test1("1","2") 
}

我们知道调用的始终是test1(arg1),也就是只有一个参数的函数,但如何获取传递的其他参数呢?

这就要用到函数中特殊的参数arguments,arguments包含了所有传递给函数的参数

function test1() 
{ 
var text=""; 
for(var i=0;i<arguments.length;i++){ 
text+="参数"+i+":"+arguments[i]; 
} 
alert(text); 
} 
//测试代码 
function test(){ 
test1("1"); 
test1("1","2"); 
test1("1","2","3"); 
}

经过测试发现,arguments包含了传递给函数的所有参数,并且arguments.length根据实际传递参数的个数的不同而不同,arguments.length代表了实际传递给函数参数的个数。

3、如何在js中实现函数的重载?

经过以上的测试发现,在js中不能直接实现函数的重载,但有没有办法实现类似重载效果的方法呢?

可以,主要就是利用arguments

例如:

function test1() 
{ 
var text=""; 
if(arguments.length==1) 
{ 
//调用一个参数的方法 
} 
else if(arguments.length==2) 
{ 
//调用两个参数的方法 
} 
else { //其他的方法 
} 
}
Javascript 相关文章推荐
jquery中的sortable排序之后的保存状态的解决方法
Jan 28 Javascript
用C/C++来实现 Node.js 的模块(一)
Sep 24 Javascript
常用的jQuery前端技巧收集
Dec 24 Javascript
百度地图api如何使用
Aug 03 Javascript
学习JavaScript设计模式(链式调用)
Nov 26 Javascript
js下将金额数字每三位一逗号分隔
Feb 19 Javascript
javascript设计模式之模块模式学习笔记
Feb 15 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
Jun 07 Javascript
vue.js中v-on:textInput无法执行事件问题的解决过程
Jul 12 Javascript
JS实现的简单分页功能示例
Aug 23 Javascript
微信小程序返回上一页传参并刷新过程解析
Dec 13 Javascript
angular中的post请求处理示例详解
Jun 30 Javascript
jquery.validate.js插件使用经验记录
Jul 02 #Javascript
escape编码与unescape解码汉字出现乱码的解决方法
Jul 02 #Javascript
js获取IP地址的方法小结
Jul 01 #Javascript
jQuery截取指定长度字符串的实现原理及代码
Jul 01 #Javascript
原生js事件的添加和删除的封装
Jul 01 #Javascript
jQuery的:parent选择器定义和用法
Jul 01 #Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
Jul 01 #Javascript
You might like
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
MySQL连接数超过限制的解决方法
2011/07/17 PHP
php文件上传的简单实例
2013/10/19 PHP
php获取系统变量方法小结
2015/05/29 PHP
php并发加锁示例
2016/10/17 PHP
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
jquery JSON的解析方式
2009/07/25 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
js倒计时小程序
2013/11/05 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
python self,cls,decorator的理解
2009/07/13 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
Python实现获取磁盘剩余空间的2种方法
2017/06/07 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
Python OpenCV实现视频分帧
2019/06/01 Python
PyCharm使用之配置SSH Interpreter的方法步骤
2019/12/26 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
pycharm解决关闭flask后依旧可以访问服务的问题
2020/04/03 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
用 python 进行微信好友信息分析
2020/11/28 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码
2020/03/17 HTML / CSS
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
三年级评语大全
2014/04/23 职场文书
十佳护士先进事迹
2014/05/08 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
2015年人事专员工作总结
2015/04/29 职场文书
vue中div禁止点击事件的实现
2022/04/02 Vue.js
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android