简体   繁体   中英

How do I pass multiple arguments into a javascript callback function?

Javascript code:

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') );

The problem is if I change function doSomething to

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

I have to change the corresponding line (marked as //*.* ) in SomeClass to

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

What can be done to avoid the (*.*) line to be changed no matter how the number of 'doSomething' function's parameters is changed?

Thanks a lot!

You probably want to use the apply method

this.callback.apply(this, parameters);

The first parameter to apply indicates the value of "this" within the callback and can be set to any value.

Another way now available is to use spread syntax .

this.callback(...callbackFuncParameters)

Here it is again with the full example from the 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"}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM