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高级程序设计 事件学习笔记
Sep 10 Javascript
JS简单随机数生成方法
Sep 05 Javascript
JS定时器用法分析【时钟与菜单中的应用】
Dec 21 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
Mar 09 Javascript
ReactNative 之FlatList使用及踩坑封装总结
Nov 29 Javascript
vue watch自动检测数据变化实时渲染的方法
Jan 16 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 Javascript
vue计算属性get和set用法示例
Feb 08 Javascript
浅谈KOA2 Restful方式路由初探
Mar 14 Javascript
教你完全理解ReentrantLock重入锁
Jun 03 Javascript
VUE项目中加载已保存的笔记实例方法
Sep 14 Javascript
基于angular实现树形二级表格
Oct 16 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
source.php查看源文件
2006/12/09 PHP
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
js两种拼接字符串的简单方法(必看)
2016/09/02 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
Vue.js组件间的循环引用方法示例
2017/12/27 Javascript
解决Mac下安装nmp的淘宝镜像失败问题
2018/05/16 Javascript
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
[12:36]《DOTA2》国服注册与激活指南全攻略
2013/04/28 DOTA
python求crc32值的方法
2014/10/05 Python
python实现数组插入新元素的方法
2015/05/22 Python
python创建临时文件夹的方法
2015/07/06 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
Python操作注册表详细步骤介绍
2020/02/05 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
中学教师培训制度
2014/01/31 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
排查整治工作方案
2014/06/09 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
军人离婚协议书样本
2014/10/21 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
初中毕业感言300字
2015/07/31 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
高三英语教学反思
2016/03/03 职场文书
MySQL派生表联表查询实战过程
2022/03/20 MySQL
Python OpenGL基本配置方式
2022/05/20 Python
Nginx 502 bad gateway错误解决的九种方案及原因
2022/08/14 Servers