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 相关文章推荐
学习ExtJS Window常用方法
Oct 07 Javascript
js 实现复制到粘贴板的功能代码
May 13 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
Dec 08 Javascript
JavaScript中变量提升 Hoisting
Jul 03 Javascript
struts2+jquery+json实现异步加载数据(自写)
Jun 24 Javascript
JavaScript插件化开发教程(六)
Feb 01 Javascript
浅谈jQuery构造函数分析
May 11 Javascript
javascript设置页面背景色及背景图片的方法
Dec 29 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
Jun 01 Javascript
node前端模板引擎Jade之标签的基本写法
May 11 Javascript
Vue封装全局过滤器Filters的步骤
Sep 16 Javascript
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
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
《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
php版微信数据统计接口用法示例
2016/10/12 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
2019/06/03 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
关于setInterval、setTimeout在jQuery中的使用注意事项
2011/09/28 Javascript
IE8下String的Trim()方法失效的解决方法
2013/11/08 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
用js传递value默认值的示例代码
2014/09/11 Javascript
js读取cookie方法总结
2014/10/31 Javascript
vue源码学习之Object.defineProperty 对数组监听
2018/05/30 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
为什么Vue3.0使用Proxy实现数据监听(defineProperty表示不背这个锅)
2019/10/14 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
[01:56]生活中的妖精之七夕特别档
2016/08/09 DOTA
python自动化测试之连接几组测试包实例
2014/09/28 Python
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
python实现随机加减法生成器
2020/02/24 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
俄罗斯珠宝市场的领导者之一:Бронницкий ювелир
2019/10/02 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2016/02/09 面试题
应聘教师自荐信
2013/10/12 职场文书
调解员先进事迹材料
2014/02/07 职场文书
分公司总经理岗位职责
2014/08/03 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
工作自我评价范文
2019/03/21 职场文书