所以我正在使用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"); //
}
ondosomething() {
this.eventemitter.emit("emittedevent");
}
这将访问您的基类定义的eventemitter
getter,这将使您获得所需的Eventemitter3extensionclass
对象,然后可以在其上调用.emit()
。
仅供参考,我不知道您为什么要使用weakMap来存储它们。是否有任何原因导致事件发射器不仅仅存储在基类的实例数据中?似乎您已经确保
Uicomponentsuperclass
对象与相应的Eventemitter3extensionclass
对象之间存在一一对应的关系。