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 相关文章推荐
JavaScript异步编程:异步数据收集的具体方法
Aug 19 Javascript
js关于精确计算和数值格式化以及直接引js文件
Jan 28 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
Sep 03 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
Nov 26 Javascript
jQuery中slideUp()方法用法分析
Dec 24 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
May 20 Javascript
AngularJS模块详解及示例代码
Aug 17 Javascript
微信小程序 Storage API实例详解
Oct 02 Javascript
轻松搞定js表单验证
Oct 13 Javascript
BOM之navigator对象和用户代理检测
Feb 10 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
Mar 31 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
Mar 06 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根据操作系统转换文件名大小写的方法
2014/02/24 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
PHP实现Session入库/存入redis的方法
2017/05/04 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
Prototype Number对象 学习
2009/07/19 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
BetterScroll 在移动端滚动场景的应用
2017/09/18 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
layui使用templet格式化表格数据的方法
2019/09/16 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
Java Varargs 可变参数用法详解
2020/01/28 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
详解Python中的array数组模块相关使用
2016/07/05 Python
pyttsx3实现中文文字转语音的方法
2018/12/24 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
python opencv实现证件照换底功能
2019/08/19 Python
将自己的数据集制作成TFRecord格式教程
2020/02/17 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
Pycharm安装Qt Design快捷工具的详细教程
2020/11/18 Python
python中time、datetime模块的使用
2020/12/14 Python
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
工商学院毕业生个人自我评价
2013/09/19 职场文书
上班睡觉检讨书
2014/01/09 职场文书
村捐赠仪式答谢词
2014/01/21 职场文书
销售人员获奖感言
2014/02/05 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
人民币使用说明书
2019/04/17 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
golang 实现时间戳和时间的转化
2021/05/07 Golang