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传值了,相当于调用了传递了一个参数的情况。

相关文章

  • JS数组索引检测中的数据类型问题详解

    JS数组索引检测中的数据类型问题详解

    这篇文章主要给大家介绍了关于JS数组索引检测中的数据类型问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • JavaScript撤销恢复操作的实现方法详解

    JavaScript撤销恢复操作的实现方法详解

    这篇文章主要介绍了JavaScript撤销恢复操作的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-02-02
  • JavaScript中常见内置函数用法示例

    JavaScript中常见内置函数用法示例

    这篇文章主要介绍了JavaScript中常见内置函数用法,结合实例形式分析了JavaScript常用内置函数的功能、参数、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-05-05
  • javascript常用的数组过滤和查找方法总结

    javascript常用的数组过滤和查找方法总结

    这篇文章主要介绍了javascript常用的数组过滤和查找方法的相关资料,这些方法各有特点,适用于不同的数据处理场景,大家可以根据需求选择不同的方法,需要的朋友可以参考下
    2024-12-12
  • JS实现的合并两个有序链表算法示例

    JS实现的合并两个有序链表算法示例

    这篇文章主要介绍了JS实现的合并两个有序链表算法,结合实例形式分析了JavaScript链表的定义、节点插入、删除、查找等相关算法实现技巧,需要的朋友可以参考下
    2019-02-02
  • JavaScript使用 for...in 、 for...of 或者 forEach() 遍历元素的示例

    JavaScript使用 for...in 、 for...of 或者 forEach() 遍历元素的示例

    for...in 、 for...of 和 forEach 都是用于循环遍历集合元素的方法,但它们之间有一些重要的区别,本文通过实例代码介绍JavaScript使用 for...in 、 for...of 或者 forEach() 遍历元素的相关知识,感兴趣的朋友一起看看吧
    2023-09-09
  • JavaScript中闭包的写法和作用详解

    JavaScript中闭包的写法和作用详解

    本文给大家介绍javascript中的闭包,包括对js闭包概念的理解,闭包的几种写法和用法,闭包的主要作用,闭包与this对象,闭包与内存泄露及使用闭包的注意点相关知识,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-06-06
  • layui表单验证select下拉框实现验证的方法

    layui表单验证select下拉框实现验证的方法

    今天小编就为大家分享一篇layui表单验证select下拉框实现验证的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-09-09
  • JS数组求和的常用方法实例小结

    JS数组求和的常用方法实例小结

    这篇文章主要介绍了JS数组求和的常用方法,结合实例形式总结分析了javascript常见的遍历、循环、归并等数组操作相关技巧,需要的朋友可以参考下
    2019-01-01
  • 微信小程序wxs日期时间处理的实现示例

    微信小程序wxs日期时间处理的实现示例

    最近在做一个列表的时候,涉及到时间格式化操作。本文主要介绍了微信小程序wxs日期时间处理的实现示例,分享给大家,感兴趣的可以了解一下
    2021-07-07

最新评论