我可以使用 this.on 来监听 EventEmitter 中的事件吗?在 javascript class 中寻找 Eventmitter 的正确用法

Can I use this.on to listen to events in EventEmitter? Looking for correct usage of Eventmitter in class in javascript

我正在使用 EventEmitter3,这是我的 javascript 代码中的一个事件模块。它就像 Node.js 中的 event 模块一样工作。但是我在正确使用它时遇到了问题。

通常,如果我在我的代码中使用该模块,我会创建一个 EventEmitter 的对象,然后使用 object.emit 触发事件并使用 object.on 监听事件.我通常做的是将 object.on 放在另一个 class 中,这样它就可以完美运行。

现在我尝试在 ES6 classes 中组织我的代码。所以我在自定义 class 中扩展了 EventEmitter。假设它被称为 ClassA,它是 EventEmitter 的子class。如果我在 class 定义中监听它自己的事件,像这样:

import EventEmitter from 'eventemitter3';

class ClassA extends EventEmitter {
  constructor() {
    ...
  }

  method() {
    this.emit('send');
  }

  this.on('send', function(data) {
    // Do something with data
  });
}

我在 this.on 行收到意外标记错误。但我不确定如何在 class 中收听 class 自己的事件,或者这是否可行?我是否必须将侦听器置于 class 定义之外?

您需要为构造函数中的每个实例放置应该 运行 的调用:

class ClassA extends EventEmitter {
  constructor() {
    super()
    …
    this.on('send', data => {
      // Do something with data
    });
  }

  method() {
    this.emit('send');
  }
}

否则让实例的创建者监听事件,或从您的 class 方法中 listen/unlisten。