看下面这段代码:
class Base { name = "base"; constructor() { console.log("My name is " + this.name); } } class Derived extends Base { name = "derived"; } // Prints "base", not "derived" const d = new Derived();
输出的是 base,而不是 derived:
这是因为 JavaScript 下列的初始化规则:
基类的成员初始化
基类的构造函数初始化
子类的成员初始化
子类的构造函数初始化
这意味着基类构造函数在它自己的构造函数中看到了它自己的 name 值,因为派生类的字段初始化还没有运行。