如何从其子类访问es6超类成员?

问题描述 投票:0回答:1

所以我正在使用es6类,但我有些困惑。我的子类需要“阴影” /重写超类方法,但还需要使用超类的成员(实例化的事件发射器)。我应该如何正确地做到这一点?超类(可以使用Eventemitter3extensionclass,我也需要外部对象才能使用getter):

const eventemitter = new WeakMap(); 
export default class Uicomponentsuperclass {
  constructor() {
    eventemitter.set(this, new Eventemitter3extensionclass());
    // constructor
  }

get eventemitter() {
    return eventemitter.get(this);
  }

  ondosomething() {
    eventemitter.get(this).emit("emittedevent");
  }
// Uicomponentsuperclass
}

子类(显示访问超级事件发射器的尝试失败):

export default class Subclass extends Uicomponentsuperclass {
  constructor() {
    super();
    // constructor
  }

ondosomething() { // shadowed 
    // eventemitter.get(this).emit("emittedevent"); // 
    // eventemitter.get(super).emit("emittedevent"); //  
    // eventemitter.get(super()).emit("emittedevent"); //  
    // super.eventemitter.emit("emittedevent"); //  
  }
javascript es6-class
1个回答
0
投票
ondosomething() { this.eventemitter.emit("emittedevent"); }

这将访问您的基类定义的eventemitter getter,这将使您获得所需的Eventemitter3extensionclass对象,然后可以在其上调用.emit()

仅供参考,我不知道您为什么要使用weakMap来存储它们。是否有任何原因导致事件发射器不仅仅存储在基类的实例数据中?似乎您已经确保Uicomponentsuperclass对象与相应的Eventemitter3extensionclass对象之间存在一一对应的关系。

© www.soinside.com 2019 - 2024. All rights reserved.