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”函数的参数数量如何更改,如何避免更改行?

非常感谢!

4

2 回答 2

24

您可能想使用apply 方法

this.callback.apply(this, parameters);

应用的第一个参数表示回调中“this”的值,可以设置为任何值。

于 2009-01-30T07:24:10.107 回答
0

现在可用的另一种方法是使用扩展语法

this.callback(...callbackFuncParameters)

这里又是来自 OP 的完整示例:

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"}
于 2020-06-29T21:33:19.130 回答