当它引用其他内容时,从同一个类中调用类的另一个函数

时间:2016-04-21 15:17:39

标签: node.js events ecmascript-6

我们有这段代码:

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

帮助?

1 个答案:

答案 0 :(得分:1)

您需要bind您的Example实例的事件监听器:

registerEvents(eventEmitter){
    this.eventEmitter = eventEmitter;
    eventEmitter.on('event', this.doSomething.bind(this));
}