javascript - 提供给 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
实例数据?
解决方案
推荐阅读
- postgresql - PosgtreSQL 中没有键的 JPA 实体
- excel - 在 Excel VBA 中选择图像
- plsql - PL/SQL dbms_output 在 CLOB 中添加额外的回车
- r - 防止 dcast 聚合数据
- powershell - PowerShell 删除项目不等待
- vb.net - 将文本的颜色从某个字符更改为 RichTextBox 行的末尾
- javascript - 即使没有触发 keydown 事件,ngx-mask 也会将 ng-pristine 设置为 ng-dirty
- swift - Swift pdf没有覆盖tableview中的所有单元格
- c++ - LIBAV MJPEG 编码和霍夫曼表
- jenkins - 在 Jenkins 中使用 ant 命令运行 Ansible playbook