javascript函数能重载吗?

JavaScript不支持传统意义上的函数重载,但可通过检查参数数量和类型来模拟。利用arguments对象可识别传入参数的数量,并据此选择执行不同操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



javascript函数能重载吗?

比如定义了三个名字一样的函数,一个没有参数,一个有一个参数,一个有两个参数,然后调用时根据给予的参数个数它自己能认得调用那个吗?
微软idea  |  浏览 10483 次   2010-11-21 11:02
2010-11-21 12:00 最佳答案
javascript函数的重载和java的重载方式不一样。
定义JavaScript函数时,函数名是函数对象的标识,参数数量只是这个函数的属性。靠定义参数数量不同的函数实现重载是不行的。
调用函数时,js通过函数名找到对应的函数对象,然后根据函数按照定义时的参数,和表达式参数列表按顺序匹配,多余的参数舍去,不够的参数按undefined处理,然后执行函数代码。所以,js重载函数需要通过函数代码判断参数值和类型实现。
通常定义函数时,把必选参数放在参数列表最前面,可选参数放在参数放在参数列表必须参数后面,方便函数重载。
魔戒09 | 2016-5-7 08:36
只靠参数长度来实现function重载是可以实现的,别忘了arguments这个对象,定义一个function像这样: function myFunc(){},一个形参都不写,调用的时候,myFunc('a');myFunc('a','b');myFunc('a','b','c');然後可根据arguments.length来判断 回复
lanlingchengwa | 2015-12-11 09:21
回复 Bareev007: hahah 回复
Bareev007 | 2013-2-28 17:45
谢谢楼主的回答(=^ ^=) 回复
Jackson嘉 | 2012-12-28 18:30
你这答案太有用了,大赞呐~ 回复
呼噜文1 | 2012-11-22 17:59
赞同楼主,是正解 回复

枪锋战士 

采纳率:41% 来自:芝麻团 擅长: 其他编程语言 JAVA相关 JavaScript 数据库DB

其他回答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<script type= "text/javascript" >
         //js是不支持重载的,通过但是arguments以及prototype可以实现重载和继承的效果:
         //1,通过arguments对象,去判断函数的参数个数:
         function  doAdd(){
             if (arguments.length==1){
                alert(arguments[0]+10);
             } else  if (arguments.length==2){
                alert(arguments[0]+ arguments[1]);
             }
         }
         doAdd(10);  //outputs 20
         doAdd(20,30);  //outputs 50
   
     /*备注:开发人员定义的函数都可以接受任意个数的参数(根据NetScript 文档,最多能接受25个) ,而不会引发错误,任何遗漏的参数都会用undefined 代替,多余的参数被将忽略。*/
   
     //2,通过prototype对象实现继承,添加新的属性和方法
      function  persona(){
         this .a =  'A' ;
         this .sayA =  function (){
             alert( 'My name is a' )
         }
   
      }
       
       function  personb(){
             this .b =  'B' ;
             this .sayB =  function (){
                 alert( 'My name is b' )
             }
          }
     var  a =  new  persona();
     personb.prototype = a;
         
         var  b =  new  personb();  //此时b函数拥有了a的属性和方法
         
     alert(b.a); //outputs :A
     b.sayA();  //outputs :my name is a
     
     alert(b.b); //outputs :B
         b.sayB();  //outputs :my name is a
     </script>
baidan1989    |  2016-01-29 16:02
评论 
2  0
不能函数重载。
原因是js中唯一识别函数的就是函数的函数名。
terrymoone    |  2015-09-19 21:23
评论(1) 
1  0
blackheavenzsh | 2016-9-7 15:51
你的js只能说是入门 回复

javascript函数能重载吗?

比如定义了三个名字一样的函数,一个没有参数,一个有一个参数,一个有两个参数,然后调用时根据给予的参数个数它自己能认得调用那个吗?
微软idea  |  浏览 10483 次   2010-11-21 11:02
2010-11-21 12:00 最佳答案
javascript函数的重载和java的重载方式不一样。
定义JavaScript函数时,函数名是函数对象的标识,参数数量只是这个函数的属性。靠定义参数数量不同的函数实现重载是不行的。
调用函数时,js通过函数名找到对应的函数对象,然后根据函数按照定义时的参数,和表达式参数列表按顺序匹配,多余的参数舍去,不够的参数按undefined处理,然后执行函数代码。所以,js重载函数需要通过函数代码判断参数值和类型实现。
通常定义函数时,把必选参数放在参数列表最前面,可选参数放在参数放在参数列表必须参数后面,方便函数重载。
魔戒09 | 2016-5-7 08:36
只靠参数长度来实现function重载是可以实现的,别忘了arguments这个对象,定义一个function像这样: function myFunc(){},一个形参都不写,调用的时候,myFunc('a');myFunc('a','b');myFunc('a','b','c');然後可根据arguments.length来判断 回复
lanlingchengwa | 2015-12-11 09:21
回复 Bareev007: hahah 回复
Bareev007 | 2013-2-28 17:45
谢谢楼主的回答(=^ ^=) 回复
Jackson嘉 | 2012-12-28 18:30
你这答案太有用了,大赞呐~ 回复
呼噜文1 | 2012-11-22 17:59
赞同楼主,是正解 回复

枪锋战士 

采纳率:41% 来自:芝麻团 擅长: 其他编程语言 JAVA相关 JavaScript 数据库DB

其他回答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<script type= "text/javascript" >
         //js是不支持重载的,通过但是arguments以及prototype可以实现重载和继承的效果:
         //1,通过arguments对象,去判断函数的参数个数:
         function  doAdd(){
             if (arguments.length==1){
                alert(arguments[0]+10);
             } else  if (arguments.length==2){
                alert(arguments[0]+ arguments[1]);
             }
         }
         doAdd(10);  //outputs 20
         doAdd(20,30);  //outputs 50
   
     /*备注:开发人员定义的函数都可以接受任意个数的参数(根据NetScript 文档,最多能接受25个) ,而不会引发错误,任何遗漏的参数都会用undefined 代替,多余的参数被将忽略。*/
   
     //2,通过prototype对象实现继承,添加新的属性和方法
      function  persona(){
         this .a =  'A' ;
         this .sayA =  function (){
             alert( 'My name is a' )
         }
   
      }
       
       function  personb(){
             this .b =  'B' ;
             this .sayB =  function (){
                 alert( 'My name is b' )
             }
          }
     var  a =  new  persona();
     personb.prototype = a;
         
         var  b =  new  personb();  //此时b函数拥有了a的属性和方法
         
     alert(b.a); //outputs :A
     b.sayA();  //outputs :my name is a
     
     alert(b.b); //outputs :B
         b.sayB();  //outputs :my name is a
     </script>
baidan1989    |  2016-01-29 16:02
评论 
2  0
不能函数重载。
原因是js中唯一识别函数的就是函数的函数名。
terrymoone    |  2015-09-19 21:23
评论(1) 
1  0
blackheavenzsh | 2016-9-7 15:51
你的js只能说是入门 回复
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值