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

 更新时间:2013年08月01日 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传值了,相当于调用了传递了一个参数的情况。

相关文章

  • javascript屏蔽右键代码

    javascript屏蔽右键代码

    屏蔽右键在某些特殊的情况下还是比较有用的,下面与大家分享个常用的屏蔽方法
    2014-05-05
  • JS如何获取对象键值对中key值的方法

    JS如何获取对象键值对中key值的方法

    这篇文章主要介绍了JS如何获取对象键值对中key值的方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • 微信小程序选择器组件picker简单入门

    微信小程序选择器组件picker简单入门

    微信小程序picker表单选择器的使用,根据官方介绍的有点不清楚,下面这篇文章主要给大家介绍了关于微信小程序选择器组件picker的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • 用chart.js添加动态背景图

    用chart.js添加动态背景图

    这篇文章主要为大家详细介绍了用chart.js添加动态背景图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • JS写的数字拼图小游戏代码[学习参考]

    JS写的数字拼图小游戏代码[学习参考]

    昨天没事做,就用JS写了个数字拼图的小游戏,自娱自乐。 可惜关于逆序数的问题还没解决,现在有时是拼不成的,大家见谅了。
    2008-10-10
  • javascript中if和switch,==和===详解

    javascript中if和switch,==和===详解

    这篇文章主要给大家详细介绍了javascript中if和switch,==和===的区别和联系,十分的细致实用,有需要的小伙伴可以参考下。
    2015-07-07
  • Bootstrap table分页问题汇总

    Bootstrap table分页问题汇总

    这篇文章主要为大家汇总了Bootstrap table分页的典型问题,以及对应每个bootstrap table分页问题的解决方法,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • 深入浅出分析javaScript中this用法

    深入浅出分析javaScript中this用法

    这篇文章主要介绍了javaScript中this用法,实例分析了javascript中this的用途与相关的使用技巧,需要的朋友可以参考下
    2015-05-05
  • javascript import css实例代码

    javascript import css实例代码

    差点被FF下的insertRule给带晕了. sheet.insertRule("@import url('aa.css');",sheet.cssRules.length);
    2008-07-07
  • JS常见面试试题总结【去重、遍历、闭包、继承等】

    JS常见面试试题总结【去重、遍历、闭包、继承等】

    这篇文章主要介绍了JS常见面试试题,总结分析了javascript去重、遍历、闭包、继等相关算法与操作技巧,需要的朋友可以参考下
    2019-08-08

最新评论