详解JS函数重载

 更新时间:2014年12月04日 10:03:14   投稿:hebedich  
本文主要介绍了利用JavaScript中的特殊对象arguments来模拟函数重载的解决方案,非常的实用,给需要的小伙伴参考下

JS的函数定义可以指定形式参数名称,多多少少我们会以为js至少可以支持参数个数不同的方法重载,然而遗憾的是这仅仅是一个假象,js所有的参数都是以arguments传递过去的,这个参数类似于数组,在函数调用的时候,所有的实参都是保存在了这个数据结构里面,我们定义函数的时候所指定的形式参数其实是为这个数据结构里面的数据定义一个快捷的访问方式。也就是说js所有的函数都是支持无限个参数的,加上数据类型是弱类型,那么JS的函数除了名称就真的没有方法区别了?

  办法总是有的,我们可以利用JavaScript中的特殊对象arguments来模拟函数重载。用它来判断传入参数的个数或类型以区分重载。

1.根据参数个数重载

js判断传入参数数量可以用arguments.length这个属性来判断;

复制代码 代码如下:

<script type="text/javascript">
function add() {
    if (arguments.length == 1) {
        alert(arguments[0] + 10);
    }
    else if (arguments.length == 2) {
        alert(arguments[0] + arguments[1]);
    }
}
//函数调用
add(10);
add(10, 20);
</script>

2.根据参数类型重载

判断变量类型的3种方法:
1.用 typeof 语句判断变量类型,typeof语句返回类型对应的字符串。
2.用 instanceof 语句判断变量类型,instanceof语句返回true/false。
3.用 constructor 属性判断变量类型,这个属性返回用来构造该变量的构造函数引用。
对照表:可以看出用 typeof 不能准确的判断出具体的类型,所以我们用 constructor 来进行判断。

typeof string number object function boolean object object
constructor String Number Object Function Boolean Array User Define

复制代码 代码如下:

<script type="text/javascript">
function add()
{
    if (arguments.length == 0) return 0;
    var sum=0;
    for(var i=0; i<arguments.length; i++){
        if(arguments[i].constructor == Number){
        //或者改为:if(arguments[i] instanceof Number)
        //或者改为:if(typeof(arguments[i])=="number")
        sum += arguments[i];
      }
    }
    return sum;
}
//函数调用
alert(add(10));
alert(add(10,20));
</script>

小伙伴们是否理解了javascript函数重载的方法了呢,有疑问就留言吧

相关文章

  • JavaScript 数组运用实现代码

    JavaScript 数组运用实现代码

    复习一下JS中数组的运用。学习js数组的朋友可以参考下。
    2010-04-04
  • js漂浮广告实现代码

    js漂浮广告实现代码

    js漂浮广告实现代码,本质上就是一个来回滚动的小图片,也是一种广告形式,需要的朋友可以收藏下
    2015-08-08
  • Javascript:为input设置readOnly属性(示例讲解)

    Javascript:为input设置readOnly属性(示例讲解)

    本篇文章主要是对Javascript中为input设置readOnly属性的示例代码进行了介绍。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • BootStrap tab选项卡使用小结

    BootStrap tab选项卡使用小结

    这篇文章主要为大家详细介绍了BootStrap tab选项卡使用小结,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • JavaScript Canvas绘制六边形网格

    JavaScript Canvas绘制六边形网格

    这篇文章主要为大家详细介绍了JavaScript Canvas绘制六边形网格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • js的隐含参数(arguments,callee,caller)使用方法

    js的隐含参数(arguments,callee,caller)使用方法

    本篇文章只要是对js的隐含参数(arguments,callee,caller)使用方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • JScript的条件编译

    JScript的条件编译

    JScript的条件编译...
    2007-05-05
  • JS中的二叉树遍历详解

    JS中的二叉树遍历详解

    这篇文章主要为大家详细介绍了JS中的二叉树遍历,何为二叉树,什么是二叉树的遍历,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • JScript中使用ADODB.Stream判断文件编码的代码

    JScript中使用ADODB.Stream判断文件编码的代码

    在实现TextStraem的时候,找到判断文件编码的代码是VBS的,但是在JScript中是没有ASC等函数的,也不能对二进制数据进行处理,因此需要通过一个特别的方法来获取文件开关的编码标识。
    2008-06-06
  • JavaScript实现数字前补“0”的五种方法示例

    JavaScript实现数字前补“0”的五种方法示例

    这篇文章主要介绍了JavaScript实现数字前补“0”的五种方法,结合具体实例形式分析了javascript数字前补0的相关操作技巧,涉及javascript字符串遍历、迭代、截取、构造等操作,需要的朋友可以参考下
    2019-01-01

最新评论