在我的项目中,我注册了不同的函数(具有不同数量的参数)作为许多事件的侦听器。当事件发生时,我需要触发相关的函数。我接收以数组形式传递给侦听器方法的参数,而侦听器函数需要每个单独的参数。所以,我正在这样做,但我不喜欢这种方法,想知道是否有一种优雅的方法,
function callListenerWithArgs(func, args){
switch(args.length){
case 1:
func(args[0]);
break;
case 2:
func(args[0], args[1]);
break;
case 3:
func(args[0], args[1], args[2]);
break;
case 4:
func(args[0], args[1], args[2], args[3]);
break;
default:
func();
}
}
使用.apply
func.apply(null, args)
如果需要绑定到特定范围,可以传递另一个参数来用作this
函数内部:
func.apply(scope, args);
此外,JavaScript 的一个细微差别是您可以调用具有未定义值的函数。因此,对现有代码进行一些小调整将在 95% 的情况下起作用(这不是建议作为解决方案,只是指出它):
// will handle any number of args up to 7
function callListenerWithArgs(func, args){
func(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
}
If your func
定义为:
function foo(a, b, c){
}
you get a
, b
, c
通过了,还有一些undefined
被忽略的值。正如我上面所说,这在 95% 的情况下都有效。如果你检查过,它就不起作用arguments.length
在被调用函数中,因为无论函数定义的参数数量如何,它总是相同的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)