首页 > 解决方案 > 提供给 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实例数据?

标签: javascriptinheritancethissuperes6-class

解决方案


推荐阅读