【问题标题】:How do I pass multiple arguments into a javascript callback function?如何将多个参数传递给 javascript 回调函数?
【发布时间】:2009-01-30 07:19:38
【问题描述】:

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'函数的参数数量如何改变,如何避免(*.*)行被改变?

非常感谢!

【问题讨论】:

    标签: javascript callback


    【解决方案1】:

    您可能想使用apply method

    this.callback.apply(this, parameters);
    

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

    【讨论】:

    • 我对如何使用这个功能有点困惑。我想要做的是将函数传递给这样的回调 - myfunction(function(myele) { //use myele })。所以我在这里传递了一个匿名回调函数,并将 myele 参数传递给它。我将如何使用您上面的代码执行此操作?
    【解决方案2】:

    现在可用的另一种方法是使用spread syntax

    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"}
    

    【讨论】:

      猜你喜欢
      • 2011-03-28
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 2016-02-25
      • 2013-02-07
      • 1970-01-01
      相关资源
      最近更新 更多