静态初始化块

静态初始化块是一项非常新推出的 JavaScript 功能, ECMAScript 2022,且仅在 新型浏览器。 借助静态初始化块,您可以动态设置静态字段的值, 使用涉及多条语句的逻辑。

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

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."

检查您的理解情况

下列哪些表述是正确的?

在静态初始化块后声明的字段可用 内部的组件。
静态初始化块在类 。
一个类只能包含一个静态初始化块。