JS函数重载解决方案
来源:互联网 发布:51recovery数据恢复 编辑:程序博客网 时间:2024/06/03 19:07
JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数调用的时候,所有的实参都是保存在了这个数据结构里面,我们定义函数的时候所指定的形式参数其实是为这个数据结构里面的数据定义一个快捷的访问方式。也就是说js所有的函数都是支持无限个参数的,加上数据类型是弱类型,那么JS的函数除了名称就真的没有方法区别了?
办法总是有的,我们可以利用JavaScript中的特殊对象arguments来模拟函数重载。用它来判断传入参数的个数或类型以区分重载。
1.根据参数个数重载
js判断传入参数数量可以用arguments.length这个属性来判断;
<script type="text/javascript">function add() { if (arguments.length == 1) { alert(arguments[0] + 10); } else if (arguments.length == 2) { alert(arguments[0] + arguments[1]); }}//函数调用add(10);add(10, 20);</script>
2.根据参数类型重载
判断变量类型的3种方法:
1.用 typeof 语句判断变量类型,typeof语句返回类型对应的字符串。
2.用 instanceof 语句判断变量类型,instanceof语句返回true/false。
3.用 constructor 属性判断变量类型,这个属性返回用来构造该变量的构造函数引用。
对照表:可以看出用 typeof 不能准确的判断出具体的类型,所以我们用 constructor 来进行判断。
<script type="text/javascript">function add() { if (arguments.length == 0) return 0; var sum=0; for(var i=0; i<arguments.length; i++){ if(arguments[i].constructor == Number){ //或者改为:if(arguments[i] instanceof Number) //或者改为:if(typeof(arguments[i])=="number") sum += arguments[i]; } } return sum;}//函数调用alert(add(10));alert(add(10,20));</script>
0 0
- JS函数重载解决方案
- JS函数不存在重载
- js函数的重载
- js不支持函数重载
- 详解JS函数重载
- js函数的重载
- js不支持函数重载
- js函数重载理论
- js函数重载
- 【JS】【函数重载】
- js不支持重载的解决方案
- js中没有函数重载
- js函数重载的问题
- js全局函数以及重载
- js中没有函数重载
- 关于模版重载函数函数命名冲突的解决方案
- 如何实现JS函数的重载
- JavaScript学习-js中函数的重载
- AFN详解(检测网络状态,下载,上传,数据请求)
- wait、sleep、notify、notifyAll的区别
- 合服相关笔记
- 基于nrf51822的蓝牙4.0 dht11测温开发
- HttpServletRequest介绍
- JS函数重载解决方案
- Set Matrix Zeroes
- 数据库之SQL语言
- HttpServletRequest对象方法的用法
- C++指针与引用(二):常用const指针,增强程序的健壮性
- n色方柱问题
- node问题之FATAL ERROR: Allocation failed - process out of memory
- 新~伸缩ImageView
- 2015年11月26日 每天半小时学英语