如何将多个参数传递给JavaScript回调函数?

19

JavaScript 代码:

function doSomething(v1,v2){ //blah; }

function SomeClass(callbackFunction,callbackFuncParameters(*Array*))={
   this.callback = callbackFunction;
   this.method = function(){
       this.callback(parameters[0],parameters[1])  // *.*
   }
}

var obj = new SomeClass( doSomething, Array('v1text','v2text') );
问题是如果我将函数doSomething更改为

function doSomething(v1,v2,v3){ //blah; }

我必须更改 SomeClass 中标记为 //*.* 的相应行。

this.callback(parameters[0],parameters[1],parameters[2]);

无论如何更改'doSomething'函数的参数数量,有什么方法可以避免更改(*.*)这一行?

非常感谢!

2个回答

25

你可能想要使用apply方法

this.callback.apply(this, parameters);

apply的第一个参数指定了回调函数中的"this"的值,并且可以设置为任何值。


1
我对如何使用这个功能有点困惑。我想做的是将一个函数传递给回调函数,类似于这样——myfunction(function(myele) { //use myele })。所以我在这里传递了一个匿名回调函数,myele参数被传递给它。我应该如何在上面的代码中实现这个? - Metropolis
https://jsfiddle.net/osyzc1d4/3/ - Harshil Modi

2
现在可用的另一种方法是使用扩展语法
this.callback(...callbackFuncParameters)

这里是来自原帖的完整示例:
function doSomething(v1,v2) {
    console.log('doing', {v1, v2});
}

function SomeClass(callbackFunction, callbackFuncParameters) {
   this.callback = callbackFunction;
   this.method = function(){
       this.callback(...callbackFuncParameters); // spread!
   }
}

var obj = new SomeClass( doSomething, Array('v1text','v2text') );
obj.method()
// output: doing {v1: "v1text", v2: "v2text"}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接