29

いくつかの関数があり、それは何か長い作業を行い、コールバックを提供します。

someFunc: function(argument, callback, context) {
  // do something long

  // call callback function
  callback(context);
}

アプリケーションでは、この関数を使用します

someFunc('bla-bla', function (context) {
  // do something with this scope
  context.anotherFunc();
}, this);

contextパラメータを渡さずにコールバック関数を実装するには?

このようなものが必要です:

someFunc('bla-bla', function () {
  // do something with this scope
  this.anotherFunc();
}, this);
4

2 に答える 2

15

Function.prototype.call関数を呼び出し、その関数の値を手動で設定するために使用しthisます。

someFunc: function(argument, callback, context) {
    callback.call(context); // call the callback and manually set the 'this'
}

これで、コールバックに期待this値が設定されました。

someFunc('bla-bla', function () {
  // now 'this' is what you'd expect
    this.anotherFunc();
}, this);

もちろん、.call呼び出しで通常のように引数を渡すことができます。

callback.call(context, argument);
于 2012-11-08T01:53:58.560 に答える