你使用“假”函数在JavaScript中重载?
这个问题在这里已经有了答案:
在JavaScript中,传递参数的趋势是对象的属性,即有一个参数是对象,因此您可以按任意顺序指定任何内容。 有了这种方法,你可以检查'未定义的,你的功能可以按照。
如果你在不同情况下有相当大的行为,你可以扩展这个想法,把每个案例分解成一个单独的函数,然后由你的主“重载”函数调用。
例如:
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
魔术变量的数组解构的简写,而不是固定的函数签名。
对速度的影响非常小,甚至不成为考虑因素。
至于什么时候这样做,什么时候使用单独的功能,这完全是一个程序清晰度和可用性问题,可能会受到广泛的意见。
链接地址: http://www.djcxy.com/p/51967.html上一篇: Do You Use "Fake" Function Overloading In JavaScript?
下一篇: returning all results even if no match and make delay to ajax