这在超类构造函数调用之前是不允许的

Ali*_*Ali 0 javascript ecmascript-6 es6-class

我想使用 super 的构造函数将子类实例传递给超类,但出现此错误

super(this);  
Run Code Online (Sandbox Code Playgroud)

这在超类构造函数调用之前是不允许的

为什么我收到这个错误,我该如何解决这个问题


class Parent
{
    constructor(child)
    {
        this.child = child;
    }

    //...somewhere in code
    //child.doSomething();
}


class Child extends Parent
{
    constructor()
    {
        super(this);   // <==== the error here
    }

    doSomething = () =>
    {
        //...
    }
}
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 5

没有必要传递this给,super()因为this在超类构造函数内部将是对同一对象的引用。回想一下,您的类层次结构将协作对单个新对象执行初始化。

对 的调用super()必须出现在对 的任何引用之前this,包括在super()参数列表中。为什么?因为为了模仿其他 OO 语言的行为,必须是类层次结构中最顶层的初始化程序首先处理新对象。父(或“高级”)初始化器应该能够假设该级别的原型方法具有基类所期望的语义,因为它不“知道”子类可能对其原型做了什么等。如果子类初始化器可以修改新对象并覆盖基类原型方法(或其他类似的方法),这会很混乱。