我在JavaScript中了解call
和apply
,但我目前仍然遇到以下情况。
我正在使用 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
。
有什么建议吗?
答案 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
。