天天看点

TypeScript class 构造函数和成员的初始化顺序

看下面这段代码:

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:

TypeScript class 构造函数和成员的初始化顺序

这是因为 JavaScript 下列的初始化规则:

基类的成员初始化

基类的构造函数初始化

子类的成员初始化

子类的构造函数初始化

这意味着基类构造函数在它自己的构造函数中看到了它自己的 name 值,因为派生类的字段初始化还没有运行。

/118228427

继续阅读