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?