你会使用“冒牌”吗?JavaScript中的函数重载
本文关键字:JavaScript 重载 函数 冒牌 | 更新日期: 2023-09-27 18:06:31
在c#中,我可能有一个像这样的重载函数:
public string OverLoad(string str1) {return str1;}
public string OverLoad(string str1, string str2) {return str1+str2;}
我知道JavaScript并没有内置对重载函数的支持,但是有人围绕这个工作来实现重载函数功能吗?
我很好奇:
1)。对速度的影响
2)。使用不同函数名与重载的原因
似乎你可以检查参数是否未定义,并在JavaScript中"伪造"功能。对我来说,只需改变参数的数量就可以轻松地改变函数,这将是一个相当大的优势。
在javascript中有一种倾向,传递参数是对象的属性,即有一个参数是对象,因此你可以指定任何东西,以任何顺序。使用这种方法,您可以检查'undefined',并且您的函数可以根据。
如果你在不同的情况下有相当大的行为,你可以扩展这个想法,把每个情况分成一个单独的函数,然后由你的主'重载'函数调用。
例如:function a (params) {
// do for a
}
function b () {
// do for b
}
function main (obj) {
if (typeof obj.someparam != 'undefined') {
a(whatever-params);
} else if (typeof obj.someotherparam != 'undefined') {
b(whatever-params);
}
}
您还可以根据参数的数量或实参的数量使用相同的方法。
JavaScript
不支持函数重载。虽然它允许你传递一个可变数量的参数。
您必须检查function
内部传递了多少arguments
以及它们的类型。
这是很常见的,甚至没有注意到。
。,在JQuery中,on()
方法有多个调用签名:
.on( events [, selector ] [, data ], handler(eventObject) )
.on( events [, selector ] [, data ] )
对第一种形式的调用看起来像$('sel').on('click', function(e){/*handler*/})
。对第二种形式的调用看起来像$('sel').on({click: function(e){/*click handler*/}, mouseover: function(e){/*mouseover handler*/})
。请注意,这在Java/c#术语中演示了"多态性"(即不同类型的参数)和"重载"(即可选参数)。
关键字参数(使用单个对象参数模拟)也很常见,例如$.ajax({settings})
。
所以,是的,这是到处都在做的,但是你把它称为"重载"是一个类别混淆。JS既不是静态类型的,也没有固定数量的函数参数。在调用时,无论函数声明什么,都可以提供任意多或任意少的参数。您应该将函数声明中的参数列表视为arguments
魔术变量的数组解构的简写,而不是将其视为固定的函数签名。
对速度的影响很小,甚至不需要考虑。
至于什么时候这样做,什么时候使用一个单独的函数,这完全是一个程序的清晰度和可用性问题,可能会受到广泛的意见。