正确配置事件发射器以在父实例与对象实例之间进行通信的正确方法?

EventEmitter和ES6类的新手,我正在尝试使用适当的绑定。我有一个实例化EventEmitter的“ main”。在“主要”中,我实例化了一些我希望能够侦听“主要”的事件发射器发出的事件的对象。我可以将对main的EventEmitter的引用传递给每个对象的构造函数,但是由于该对象的类是在单独的模块文件中定义的,因此我认为它不知道ref的类型为EventEmitter,因此在对象的类中我无法定义一个引用main的EventEmitter的“ on”侦听器:

主要:

const listeningclassinstance = new ListeningClass(maineventemitter);

子模块类:

export default class ListeningClass {
  constructor(maineventemitter) {
    this.maineventemitter = maineventemitter;
  }
  maineventemitter.on("emittedevent",() => { // Visual Studio Code complains
    onemittedevent();
  });

  onemittedevent() {
    console.log("ListeningClass onemittedevent")
  }
  // ListeningClass
}
lflxyz 回答:正确配置事件发射器以在父实例与对象实例之间进行通信的正确方法?

所以这是我组装的东西,虽然我知道ES6中有更好的getter / setter语法,但它正在工作。同样,在单个异步调用之后,我将EE3类定义传递给子模块的类,以加载EE3模块...可能有更好的方法来处理该问题...

主要:

// webpack dynamic import of EventEmitter3 here,setting a ref to EE3's class def
// the following Main code is actually within the dynamic import's promise then()

const listeningclassinstance = new ListeningClass(ee3class,maineventemitter);
const listeningclassinstanceeventemitter = listeningclassinstance.getlisteningclasseventemitter();
listeningclassinstanceeventemitter.on("emittedeventfromlisteningclassinstance",() => {
    console.log("main can hear event emitted from listeningclassinstance");
  });

子模块类:

export default class ListeningClass {
  constructor(ee3class,maineventemitter) {
    this.maineventemitter = maineventemitter;
    this.maineventemitter.on(
      "emittedeventfrommain",this.onemittedeventfrommain.bind(this);
    this.eventemitter = new ee3class();  
  }

  onemittedeventfrommain() {
    console.log("ListeningClass emittedeventfrommain");
    this.eventemitter.emit("emittedeventfromlisteningclassinstance");
  }

getlisteningclasseventemitter() {
    return this.eventemitter;
}

  // ListeningClass
} 
本文链接:https://www.f2er.com/3148417.html

大家都在问