gpt4 book ai didi

javascript - 不能通过 Babel 的 transform-class-properties 在父类构造函数中使用子类的属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:27:47 25 4
gpt4 key购买 nike

当通过 Babel 的“transform-class-properties”插件扩展父类并声明子类的属性时,子类的任何类属性都无法通过父类的构造方法访问。

class One {

internal = 1;

constructor() {
console.log('constructor internal', this.internal);
}

}

class Two extends One {

internal = 2;

}

new Two();

在上面的示例中,'constructor internal 1' 将输出到控制台。当查看编译后的代码时,原因很明显,首先执行父类,然后将生成的对象与子类集成。

抱歉,如果这是设计使然,但它让我感到困惑,因为以下代码在非构造函数方法中以我期望的方式工作(因此 boot() 方法引用子类的“内部”属性值):

class One {

internal = 1;

constructor() {
console.log('constructor internal', this.internal);
}

boot() {
console.log('boot internal', this.internal);
}

}

class Two extends One {

internal = 2;

constructor() {
super();

this.boot();
}

}

new Two();

因此,即使调用在父类上声明的方法,它也会继承子类的属性。这只是构造函数方法似乎没有按预期运行(至少对我而言 - 再次,如果这被错误地解释,我们深表歉意,但相关的 Babel 页面上没有列出任何警告。)

谢谢。

最佳答案

我认为这是自然的。如果你想覆盖父类的属性初始值,你应该在派生类的构造函数中进行。

class Two extends One {

constructor() {
// Call parent constructor.
super();
// Override here.
this.internal = 2;
}

}

希望对您有所帮助。快乐编码 (:

关于javascript - 不能通过 Babel 的 transform-class-properties 在父类构造函数中使用子类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39100000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com