静态初始化块

静态初始化块是一项非常新的 JavaScript 功能,已在 ECMAScript 2022 中标准化,并且仅在现代浏览器中受支持。静态初始化块允许您动态设置静态字段的值,使用跨多个语句的逻辑。

要创建静态初始化块,请使用 static 关键字,后跟花括号 ({}) 中的块语句

class MyClass {
  static {}
}

此模式允许您初始化或更改在类主体中声明的静态字段

class MyClass {
  static firstProperty = 'First property.';
  static secondProperty;
  static {
    this.secondProperty = 'Second property.';
  }
}

MyClass.secondProperty;
"Second property."

这些语句在类首次初始化时进行评估,即 JavaScript 引擎首次评估它时,而不是像 constructor() 那样在创建类的实例时进行评估

class MyClass {
    static {
        console.log( "Static initialization block." );
    }
    constructor() {
        console.log( "Constructor." );
    }
}
> "Static initialization block."

const myClassInstance = new MyClass();
> "Constructor."

一个类可以包含多个静态初始化块,这些块按照声明的顺序与任何其他静态字段和方法一起评估。这意味着只有在静态初始化块之前声明的字段在该块中可用

class MyClass {
  static myNewField;
  static {
    this.myNewField = this.myField;
  }
  static myField = "My value.";
};

MyClass.myNewField;
> undefined

class MyCorrectedClass {
  static myNewField;
  static myField = "My value.";
  static {
    this.myNewField = this.myField;
  }
};

MyCorrectedClass.myNewField;
> "My value."

检查您的理解

以下哪些陈述是正确的?

静态初始化块在类首次初始化时进行评估。
一个类只能包含一个静态初始化块。
在静态初始化块之后声明的字段在该块内部可用。