JavaScript中的函数重载 ?

  • 回答 (2)
  • 关注 (0)
  • 查看 (46)

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

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

  1. 首先使用不同的名称
  2. 使用可选参数 y = y || 'default'
  3. 使用参数数目
  4. 检查参数的类型

或者有什么更好的办法?

风雨交加风雨交加提问于
akjok54stay hungry stay foolish回答于

我经常这样做:

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

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

最爱开车啦互联网的敏感者回答于

使用参数进行函数重载的最好方法不是检查参数长度或类型; 检查类型只会让你的代码变得很慢,而且你还可以获得数组,对象等的乐趣。

大多数开发者所做的就是将一个对象作为他们方法的最后一个参数。这个对象可以容纳任何东西

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

然后你可以在你的方法中处理它

扫码关注云+社区

领取腾讯云代金券