美文网首页
JavaScript Arguments与实现函数重载

JavaScript Arguments与实现函数重载

作者: tazbingor | 来源:发表于2017-04-05 18:28 被阅读0次

    可以用函数内置的argument模拟函数重载

    什么是arguments ?

    arguments 是一个类似数组的对象, 对应于传递给函数的参数。
    属性

    1.arguments.length

    返回当前函数的参数数量

    function myMultiplication() { 
        console.log(arguments.length);//2
        return arguments[0] * arguments[1] 
    }
    console.log(myMultiplication.call(null,6,6));
    

    2.arguments.callee

    返回一个对函数的引用,该函数调用了当前函数 ECMAScript (ES5) 禁止使用 arguments.callee()

    具体实现

    1.根据参数个数重载

    function myMath() {
      if (arguments.length === 2) {
        return arguments[0] + arguments[1]
      } else if (arguments.length === 3) {
        return arguments[0] + arguments[1] + arguments[2]
      }else {
        return 0;
      }
    }  
    console.log(myMath(1,1));//2
    console.log(myMath(1,1,1));//3
    

    2.限制函数参数类型重载

    function myMathAdd() {
        // console.log(arguments.length)
        if (arguments.length === 0) { return 0; }
        var res = 0
        for (var i = 0; i < arguments.length; i++) {
            if (arguments[i].constructor === Number) {//判断参数类型
                res = res + arguments[i];
            }
        }
        // console.log(res);
        return res;
    }
    console.log(myMathAdd.call(myMathAdd, 1, 2, 3))//6
    console.log(myMathAdd.call(myMathAdd, 6, 6))//12
    

    JS不需要函数重载

    函数重载是java,C#,C等强类型语言的使用者的习惯,在现阶段看来,无非是多写几个字多取几个函数名的而已,况且在JS中,相同函数名会导致后者覆盖前者.

    function testOverload(){
        return arguments[0] + arguments[1]; 
    }
    
    function testOverload(){
        return arguments[0] + arguments[1] + arguments[2]; 
    }
    console.log(testOverload.call(null,1,1));//NaN
    console.log(testOverload.call(null,1,1,1));//3
    

    上述的例子已经很明显了,反映JS函数的一个特性,虽然JS的函数也叫函数,但JS的函数和其他强类型语言(如Java)的函数还是有区别的,在java中是通过方法名、参数类型、参数数量、参数顺序这四个方面(方法签名)来确定一个函数。而JS只通过函数名来确定函数,并且JS的函数对象函数名是普通变量。上述的testOverload()相当于绑定了两个函数对象,从结果得知,后者必然覆盖前者,并不会同时存在,所以函数重载也就没有必要了。
    其实多写几个字也不累。

    参考
    <li><a>https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments

    相关文章

      网友评论

          本文标题:JavaScript Arguments与实现函数重载

          本文链接:https://www.haomeiwen.com/subject/wywvottx.html