静态初始化块

静态初始化块是一项全新的 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."

检查您的掌握程度

下列哪些表述是正确的?

首次初始化类时,系统会对静态初始化块进行求值。
一个类只能包含一个静态初始化块。
在静态初始化块之后声明的字段可在该块内部使用。