博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS函数重载解决方案
阅读量:5992 次
发布时间:2019-06-20

本文共 1402 字,大约阅读时间需要 4 分钟。

JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数调用的时候,所有的实参都是保存在了这个数据结构里面,我们定义函数的时候所指定的形式参数其实是为这个数据结构里面的数据定义一个快捷的访问方式。也就是说js所有的函数都是支持无限个参数的,加上数据类型是弱类型,那么JS的函数除了名称就真的没有方法区别了?

  办法总是有的,我们可以利用JavaScript中的特殊对象arguments来模拟函数重载。用它来判断传入参数的个数或类型以区分重载。

1.根据参数个数重载

js判断传入参数数量可以用arguments.length这个属性来判断;

1
2
3
4
5
6
7
8
9
10
11
12
13
<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 来进行判断。

typeof string number object function boolean object object
constructor String Number Object Function Boolean Array User Define
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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>

转载于:https://www.cnblogs.com/ranran/p/javascript_chongzai.html

你可能感兴趣的文章
.NET简谈接口
查看>>
通过学习JFinal框架后的学习方法个人体会
查看>>
Eclipse使用技巧
查看>>
利用iOS API编写简单微博客户端全过程
查看>>
SET XACT_ABORT各种用法及显示结果
查看>>
JavaWeb应用中获取Spring的ApplicationContext
查看>>
关于数据库对象版本比较的脚本
查看>>
Lync Server外部访问系列PART6:启用外部访问
查看>>
漫谈ASP.NET设计中的性能优化问题
查看>>
优秀开源项目:MyXls
查看>>
文件同步工具Unison使用介绍
查看>>
图表highcharts联合jquery ajax 后端取数据前端图表渲染
查看>>
理性运维 综合管控
查看>>
stl中stacks的基本用法
查看>>
软件开发核心趋势
查看>>
求证:a^4+b^4 ≧a^3*b+a*b^3
查看>>
L4,C16:差1墩,从张数最多的套上去找
查看>>
分页sql存储过程
查看>>
spring注解
查看>>
高可用Hadoop平台-实战尾声篇
查看>>