javascript函数能重载吗?

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


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只能说是入门 回复
基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究”展开,提出了一种结合数据驱动方法与Koopman算子理论的递归神经网络(RNN)模型线性化方法,旨在提升纳米定位系统的预测控制精度与动态响应能力。研究通过构建数据驱动的线性化模型,克服了传统非线性系统建模复杂、计算开销大的问题,并在Matlab平台上实现了完整的算法仿真与验证,展示了该方法在高精度定位控制中的有效性与实用性。; 适合人群:具备一定自动化、控制理论或机器学习背景的科研人员与工程技术人员,尤其是从事精密定位、智能控制、非线性系统建模与预测控制相关领域的研究生与研究人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能预测控制;②为复杂非线性系统的数据驱动建模与线性化提供新思路;③结合深度学习与经典控制理论,推动智能控制算法的实际落地。; 阅读建议:建议读者结合Matlab代码实现部分,深入理解Koopman算子与RNN结合的建模范式,重点关注数据预处理、模型训练与控制系统集成等关键环节,并可通过替换实际系统数据进行迁移验证,以掌握该方法的核心思想与工程应用技巧。
基于粒子群算法优化Kmeans聚类的居民用电行为分析研究(Matlb代码实现)内容概要:本文围绕基于粒子群算法(PSO)优化Kmeans聚类的居民用电行为分析展开研究,提出了一种结合智能优化算法与传统聚类方法的技术路径。通过使用粒子群算法优化Kmeans聚类的初始聚类中心,有效克服了传统Kmeans算法易陷入局部最优、对初始值敏感的问题,提升了聚类的稳定性和准确性。研究利用Matlab实现了该算法,并应用于居民用电数据的行为模式识别与分类,有助于精细化电力需求管理、用户画像构建及个性化用电服务设计。文档还提及相关应用场景如负荷预测、电力系统优化等,并提供了配套代码资源。; 适合人群:具备一定Matlab编程基础,从事电力系统、智能优化算法、数据分析等相关领域的研究人员或工程技术人员,尤其适合研究生及科研人员。; 使用场景及目标:①用于居民用电行为的高效聚类分析,挖掘典型用电模式;②提升Kmeans聚类算法的性能,避免局部最优问题;③为电力公司开展需求响应、负荷预测和用户分群管理提供技术支持;④作为智能优化算法与机器学习结合应用的教学与科研案例。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,深入理解PSO优化Kmeans的核心机制,关注参数设置对聚类效果的影响,并尝试将其应用于其他相似的数据聚类问题中,以加深理解和拓展应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值