我们有这段代码:
class Example {
constructor(num) {
this.a = num;
this.eventEmitter = null;
}
doSomething() {
// This doesn't work because 'this' will refer to the emitter.
this.a += 1;
}
registerEvents(eventEmitter){
this.eventEmitter = eventEmitter;
eventEmitter.on('event', this.doSomething);
}
}
我们希望将它绑定到事件发射器,如下所示:
function ExampleUser() {
const EventEmitter = require('events');
eventEmitter = new EventEmitter();
var reactor = new Example(1);
reactor.registerEvents(eventEmitter);
eventEmitter.emit('event');
}
问题是,当调用doSomething()
时,就像假设一样,这是指发射器,而不是示例对象。因此,它无法按照我们的意愿更新this.a
。
帮助?
答案 0 :(得分:1)
您需要bind
您的Example
实例的事件监听器:
registerEvents(eventEmitter){
this.eventEmitter = eventEmitter;
eventEmitter.on('event', this.doSomething.bind(this));
}