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 相关文章推荐
List the UTC Time on a Computer
Jun 11 Javascript
jquery之Document元素选择器篇
Aug 14 Javascript
9个javascript语法高亮插件 推荐
Jul 18 Javascript
js 自动播放的实例代码
Nov 19 Javascript
ie与ff下的event事件使用介绍
Nov 25 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
Aug 10 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
Feb 13 Javascript
基于JavaScript实现类名的添加与移除
Apr 23 Javascript
JS+canvas动态绘制饼图的方法示例
Sep 12 Javascript
jQuery 禁止表单用户名、密码自动填充功能
Oct 30 jQuery
浅析JS抽象工厂模式
Dec 14 Javascript
vuex 使用文档小结篇
Jan 11 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
2008/03/28 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
yii2中关于加密解密的那些事儿
2018/06/12 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
jquery1.4 教程二 ajax方法的改进
2010/02/25 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
jQuery接受后台传递的List的实例详解
2017/08/02 jQuery
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
iview Upload组件多个文件上传的示例代码
2018/09/30 Javascript
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
2020/03/07 Python
python3中确保枚举值代码分析
2020/12/02 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
大学生护理专业自荐信
2013/10/03 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
小学教师年度个人总结
2015/02/05 职场文书
好好学习保证书
2015/02/26 职场文书
中学生学习保证书
2015/02/26 职场文书
入党积极分子个人总结
2015/03/02 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
商业计划书格式、范文
2019/03/21 职场文书
2019年销售部季度工作计划3篇
2019/10/09 职场文书