JavaScript中的函数重载

在Javascript中伪造函数重载的最佳方式是什么?

我知道在Javascript中重载函数是不可能的,就像其他语言一样。 如果我需要一个有两个用途的函数foo(x)foo(x,y,z) ,这是最好的/首选的方法:

  • 首先使用不同的名称
  • 使用可选参数,如y = y || 'default' y = y || 'default'
  • 使用参数数目
  • 检查参数的类型
  • 或者如何?

  • 使用参数进行函数重载的最好方法不是检查参数长度或类型; 检查类型只会让你的代码变得缓慢,并且你拥有数组,对象等等的乐趣。

    大多数开发人员所做的是将对象作为其方法的最后一个参数。 该对象可以容纳任何东西。

    function foo(a, b, opts) {
    
    }
    
    
    foo(1, 2, {"method":"add"});
    foo(3, 4, {"test":"equals", "bar":"tree"});
    

    然后你可以在你的方法中处理它。 [切换,if-else等]


    我经常这样做:

    C#:

    public string CatStrings(string p1)                  {return p1;}
    public string CatStrings(string p1, int p2)          {return p1+p2.ToString();}
    public string CatStrings(string p1, int p2, bool p3) {return p1+p2.ToString()+p3.ToString();}
    
    CatStrings("one");        // result = one
    CatStrings("one",2);      // result = one2
    CatStrings("one",2,true); // result = one2true
    

    JavaScript等效:

    function CatStrings(p1, p2, p3)
    {
      var s = p1;
      if(typeof p2 !== "undefined") {s += p2;}
      if(typeof p3 !== "undefined") {s += p3;}
      return s;
    };
    
    CatStrings("one");        // result = one
    CatStrings("one",2);      // result = one2
    CatStrings("one",2,true); // result = one2true
    

    这个特殊的例子在JavaScript中比C#更优雅。 未指定的参数在javascript中为'未定义',在if语句中评估为false。 但是,函数定义并不传达p2和p3是可选的信息。 如果你需要大量的重载,jQuery已经决定使用一个对象作为参数,例如jQuery.ajax(options)。 我同意他们这是超载的最强大和清晰的方法,但我很少需要超过一个或两个快速可选参数。

    编辑:根据Ian的建议更改IF测试


    JavaScript中没有真正的函数重载,因为它允许传递任何类型的任意数量的参数。 你必须在函数内部检查已经传递了多少个参数以及它们是什么类型。

    链接地址: http://www.djcxy.com/p/1495.html

    上一篇: Function overloading in Javascript

    下一篇: What browsers currently support JavaScript's 'let' keyword?