• javascript函数重载


    javascript函数重载解决方案,利用JavaScript中的特殊对象arguments来模拟函数重载。用它来判断传入参数的个数或类型以区分重载

     

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

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

    1.根据参数个数重载

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

    <script type="text/javascript">
    function add() { www.jbxue.com
        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() 
    { // www.jbxue.com
        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>
  • 相关阅读:
    ZOJ 3529
    将博客搬至CSDN
    BST 增删查操作 递归/非递归实现
    容器vector容量翻倍增长策略效率分析
    整数分解为若干项之和
    PAT-B-1080 MOOC期终成绩
    最大公约数 + 最小公倍数
    Fibonacci数
    排序
    PAT-B-1020
  • 原文地址:https://www.cnblogs.com/cfinder010/p/3556879.html
Copyright © 2020-2023  润新知