提问人:Matt 提问时间:5/14/2021 最后编辑:Matt 更新时间:5/14/2021 访问量:105
在提供给 super() 的函数中引用类实例
Reference class instance in function provided to super()
问:
假设我有以下超类:
class Super {
constructor(printMyName) {
this.name = 'Fred';
printMyName();
}
}
以及一个扩展它的类:
class Child extends Super {
constructor() {
super(() => {
console.log(this.name);
});
}
}
这是错误的,因为我的子类在超级构造之前尝试引用实例字段 - “this”关键字在调用之后才可用。super()
如何在我提供的方法中使用实例字段?super
编辑
正如@Bergi正确指出的那样,这种情况在目前的形式下是没有意义的。我的实际情况稍微复杂一些,因为我提供的函数是异步运行的,因此应该有可用的实例数据。这包括在父类和子类中声明的实例字段。super
为了尽量减少对原始示例的更改,让我们添加一个 setTimeout 以使函数异步运行:
class Super {
constructor(printMyFullName) {
this.firstName = 'Fred';
setTimeout(printMyFullName, 10000);
}
}
让我们允许子类在调用 :super
class Child extends Super {
constructor(opts) {
super(() => {
console.log('%s %s', this.firstName, this.lastName);
});
this.lastName = 'Savage';
}
}
这个问题仍然适用,但我要澄清一下:如何在提供给 的函数中使用子实例和父实例数据?super
答: 暂无答案
评论
super
super(); console.log(this.name);
ConfirmationDialog
onConfirm
ExportDialog
ConfirmationDialog
super
ConfirmationDialog
onConfirm
onConfirm
onConfirm
this
this
this
TypeError: attempted to get private field on non-instance