这是Javascript中将对象实例设置为函数参数的最佳方法

时间:2016-08-25 08:01:34

标签: javascript function callback arguments

如果问题很愚蠢,请原谅我,但是我需要问一下。

我刚开始使用回调函数,我想知道我是否采用最佳方法。

我现在正在做的事情是这样的:

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。对象的长度并不总是相同的。

5 个答案:

答案 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)

当你需要时。