3

我知道callapply使用 JavaScript,但我目前遇到以下情况。

我正在使用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.

有什么建议么?

4

2 回答 2

1

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

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

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

引用foo现在将onStart()作为第一个参数提供。

于 2013-02-15T14:04:39.430 回答
0

您可以通过thisonStart其包装在函数中来传递。

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

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

于 2013-02-15T14:02:48.157 回答