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 select控制插件
Aug 17 Javascript
一个字符串反转函数可实现字符串倒序
Sep 15 Javascript
Javascript中With语句用法实例
May 14 Javascript
你所不了解的javascript操作DOM的细节知识点(一)
Jun 17 Javascript
js实现的二级横向菜单条实例
Aug 22 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
Aug 24 Javascript
体验jQuery和AngularJS的不同点及AngularJS的迷人之处
Feb 02 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
Mar 14 Javascript
详解AngularJS之$window窗口对象
Jan 17 Javascript
vue-cli中安装方法(图文详细步骤)
Dec 12 Javascript
v-slot和slot、slot-scope之间相互替换实例
Sep 04 Javascript
JavaScript中arguments的使用方法详解
Dec 20 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
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
PHP empty函数报错解决办法
2014/03/06 PHP
php基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
用js来刷新当前页面保留参数的具体实现
2013/12/23 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
2015/08/05 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
详解webpack模块化管理和打包工具
2018/04/21 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
js实现鼠标点击页面弹出自定义文字效果
2019/12/24 Javascript
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
解决pyshp UnicodeDecodeError的问题
2019/12/06 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
2014大学生党员评议个人总结
2014/09/22 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python