源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
查看: 6|回复: 15

[JavaScript] js中方法重载如何实现?以及函数的参数问题

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2013-8-1 15:32:05 | 显示全部楼层 |阅读模式
js中没有办法直接实现方法重载,但每一个函数都有一个特殊的参数arguments,利用它可以实现方法的重载,具体示例如下 都知道在js中没有办法直接实现方法重载,因为在js中如果定义了多个名称相同,但参数个数不一样的方法,其实只有最后一个方法能被真正调用,其他的方法都被覆盖掉了。

但每一个函数都有一个特殊的参数arguments,利用它可以实现方法的重载。

例如:
复制代码 代码如下:
function Add(firstnumber,sencondnumber) {
return firstnumber+sencondnumber;
}

只能处理两个参数,如果有多个参数,或者没有参数,一个参数的情况都是处理不了的。如果没有传递参数,则firstnumber,sencondnumber都是未定义的,如果传递了一个参数,就相当于只给firstnumber赋值了,sencondnumber依然是未定义。相反如果传递了多于两个的参数,则相当于firstnumber,sencondnumber都赋值了,虽然还有其他的参数,但处理时都忽略掉了。如果能获取其他的参数,自然就可以处理了。此时应该就可以想到函数的特殊参数arguments,这个包含了传递给函数的所有参数,利用它就可以实现方法重载的效果。

以上的方法修改如下:
复制代码 代码如下:
function Add(firstnumber,sencondnumber) {
if (arguments.length == 0)//没有传递参数
{
return null;
}
else if (arguments.length == 1) {//传递的是一个参数
return firstnumber;//也可以写为 return arguments[0];
}
else if(arguments.length == 2)//传递的是两个参数
{

return firstnumber+sencondnumber;//也可以写为 return arguments[0]+arguments[1];
}

else {
var total=0;
for (var i = 0; i < arguments.length; i++) {
total=total+arguments[i]
}
return total;
}

}

当然这种方法的弊端就是参数的顺序不能打乱,如果函数实现依赖于参数的顺序,就必须进行特殊处理,例如传递null来占位。

由于传递给函数的参数是严格按照定义函数的顺序给每一个参数赋值的,如果只想给第二个参数赋值,则必须传递两个参数,否则实际上传递的值赋值给了第一个参数,并没有赋值给第二个参数。

例如只想给sencondnumber传值,但不想给firstnumber传值,必须这样调用Add(null,2)(当然函数内部必须处理传递特殊值的情况),如果这样调用Add(2),其实是给firstnumber传值了,相当于调用了传递了一个参数的情况。
回复

使用道具 举报

13

主题

2万

回帖

85

积分

注册会员

Rank: 2

积分
85
发表于 2022-10-27 13:12:31 | 显示全部楼层
先把创新班才能下班才能下班
回复 支持 反对

使用道具 举报

0

主题

1万

回帖

0

积分

中级会员

Rank: 3Rank: 3

积分
0
发表于 2023-1-10 23:21:08 | 显示全部楼层
好人好人好人好人
回复 支持 反对

使用道具 举报

4

主题

2万

回帖

107

积分

注册会员

Rank: 2

积分
107
发表于 2023-9-10 08:24:13 | 显示全部楼层
快更新啊,我擦
回复 支持 反对

使用道具 举报

2

主题

2万

回帖

380

积分

中级会员

Rank: 3Rank: 3

积分
380
发表于 2023-11-12 08:42:13 | 显示全部楼层
非常vbcbvcvbvcb
回复 支持 反对

使用道具 举报

2

主题

2万

回帖

99

积分

注册会员

Rank: 2

积分
99
发表于 2024-4-27 12:33:49 | 显示全部楼层
女生看了弄丢了卡萨诺的卡洛斯
回复 支持 反对

使用道具 举报

5

主题

2万

回帖

183

积分

注册会员

Rank: 2

积分
183
发表于 2024-5-13 11:25:19 | 显示全部楼层
啪啪啪生怕PSP怕
回复 支持 反对

使用道具 举报

3

主题

2万

回帖

163

积分

注册会员

Rank: 2

积分
163
发表于 2024-6-8 18:39:20 | 显示全部楼层
了乐趣了去了去了去了去了
TS人妖演出表演服务q3268336102电话13168842816
回复 支持 反对

使用道具 举报

4

主题

2万

回帖

303

积分

中级会员

Rank: 3Rank: 3

积分
303
发表于 2024-6-26 00:19:18 | 显示全部楼层
这个源码不错啊
回复 支持 反对

使用道具 举报

20

主题

6307

回帖

106

积分

注册会员

Rank: 2

积分
106
发表于 2024-9-12 01:18:28 | 显示全部楼层
的谁vdvdsvdsvdsdsv
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

GMT+8, 2024-11-29 23:40 , Processed in 0.191768 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表