所以我正在使用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"); //
}
答案 0 :(得分:0)
在ondosomething
中,您需要引用this
并使用您父母中定义的eventemitter
吸气剂:
ondosomething() {
this.eventemitter.emit("emittedevent");
}
this.eventemitter
就像属性访问一样,您可以像读取属性一样使用它(即使它背后确实有吸气剂代码)。
这将访问基类定义的eventemitter
获取器,它将使您获得所需的Eventemitter3extensionclass
对象,然后可以调用.emit()
。
注意:这还假定ondosomething
的调用正确,并且具有正确的值this
。如果不是这种情况,那也需要纠正。如果您向我们显示调用代码,我们可以为您提供建议。如果要传递obj.ondosomething
作为回调,则可能必须像.bind()
中那样使用obj.ondosomething.bind(obj)
来确保该方法被正确地绑定到其对象。
仅供参考,我不知道您为什么使用weakMap
来存储它们。是否有任何原因导致事件发射器不仅仅存储在基类的实例数据中?看来您已经确保Uicomponentsuperclass
对象和相应的Eventemitter3extensionclass
对象之间存在一对一的对应关系。
答案 1 :(得分:0)
要从子类中调用Super类方法,请用户super.methodName()
答案 2 :(得分:0)
@Bergi再次正确。天哪,我必须拥有。错误是由另一个子类引发的...我将此归咎于我的过敏;-)。实际上,这可行:
config/routes.js