Nut*_*tty 6 javascript variables arguments
在我的项目中,我注册了不同的函数(具有不同数量的参数)作为许多事件的监听器.当事件发生时,我需要触发相关的功能.我以数组的形式接收要传递给listener方法的参数,而listener函数期望每个单独的参数.所以,我这样做,但我不喜欢这种方法,并想知道是否有一种优雅的方式,
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();
}
}
Run Code Online (Sandbox Code Playgroud)
小智 2
使用.apply
func.apply(null, args)
Run Code Online (Sandbox Code Playgroud)
如果需要绑定到特定范围,可以传递另一个参数以在this函数内部使用:
func.apply(scope, args);
Run Code Online (Sandbox Code Playgroud)
此外,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]);
}
Run Code Online (Sandbox Code Playgroud)
如果你的func定义为:
function foo(a, b, c){
}
Run Code Online (Sandbox Code Playgroud)
您会传入a, b,以及其他一些被忽略的值。正如我上面所说,这在 95% 的情况下都有效。如果您签入被调用的函数,它就不起作用,因为无论函数定义的参数数量如何,它总是相同的。cundefinedarguments.length