我刚开始使用回调函数,我想知道我是否采用最佳方法。
我现在正在做的事情是这样的:
function foo(someArg, callbackFunc, callbackArg1, callbackArg1, callbackArg3, .. callbackArgN);
为了使我的代码更清晰,更易于维护,我想实现的目标是:
callBackArgs= {
0: callbackArg1,
1: callbackArg1,
2: callbackArg3,
.
.
N: callbackArgN
}
我想像这样执行foo():
function foo(someArg, callbackFunc, callBackArgs)
然后在foo函数内部,我想以一种我可以将它们用作callbackFunc的参数的方式来操作callBackArgs。
PS。对象的长度并不总是相同的。
答案 0 :(得分:1)
你根本不会这样做......这听起来像是你要求这样做:
function foo(callback, callbackArgs) {
callback.apply(null, callbackArgs);
}
foo(bar, ['baz', 42]);
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply。
然而,这使得关注foo
上的回调参数的责任,这只会使整个实现变得更加复杂。回调应该关心它自己的参数:
function foo(callback) {
callback();
}
foo(function () { bar('baz', 42); });
// or
foo(bar.bind(null, 'baz', 42));
请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind。
答案 1 :(得分:0)
只需使用callBackArgs
数组。
然后,当您要致电callbackFunc
时,请使用:callbackFunc.apply(this, callBackArgs
。
这与调用callbackFunc(callbackArgs[0], ... callbackArgs[n])
答案 2 :(得分:0)
function callbackFunc(){
console.log('callback called');
}
foo.apply(this, ['someArg', callbackFunc, 1,2,3,4]);
您可以使用JavaScript的apply函数调用它,将所有参数作为数组提供。 1,2,3,4是你在这种情况下的回调参数。
答案 3 :(得分:0)
您可以简单地使用arguments
对象,它将为您提供所有参数。 MDN
按以下方式定义您的功能:
function foo () {
console.log(arguments) // [someArg, callbackFunc, callbackArg1, callbackArg1, callbackArg3, .. ,callbackArgN]
}
只需foo(someArg, callbackFunc, callbackArg1, callbackArg1, callbackArg3, .. ,callbackArgN)
答案 4 :(得分:0)
无论你想做什么都很好!如果要操纵其他函数中的参数,请遵循相同的方法。
使用 callBackArgs
作为对象可让您轻松找到参数并进行相应操作。
尝试使用临时数组 (tempArray)
并在操作后将所有参数推入其中并调用
callbackFn.apply(this, tempArray)
当你需要时。