包装JavaScript回调重新定义“this”

时间:2013-02-15 14:00:09

标签: javascript

我在JavaScript中了解callapply,但我目前仍然遇到以下情况。

我正在使用 Benchmarkjs ,它的API定义如下:

.on(eventType, listener)

所以我会这样做,例如:

/* Register the onStart callback */
suite.on('start', onStart);

我的onStart函数将被调用,以便this === suite

我怎样才能定义arguments onStart之一?

我的代码是这样的:

foo = function() {
   this.suite.on('start', this.onStart);
}

我希望我的onStart函数能够引用foo

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

您可以调用Function.prototype.bind来创建部分应用程序/ curried函数。

.bind() context 作为第一个参数,所有后面传入的参数将用作绑定函数调用的形式参数

suite.on( 'start', this.onStart.bind( this, foo ) );

foo的引用现在可以作为第一个参数提供给onStart()

答案 1 :(得分:0)

您可以将this传递给onStart,方法是将其包含在函数中。

foo = function() {
    this.suite.on('start', function(arguments){onStart(arguments, this)});
}

我更喜欢传递它而不是使用bind,因为IE 8及更低版本不支持bind