静的初期化ブロック

静的初期化ブロックは非常に新しい JavaScript 機能であり、 ECMAScript 2022 で、 最新のブラウザ。 静的初期化ブロックを使用すると、静的フィールドの値を動的に設定できます。 複数のステートメントにまたがるロジックを 使用しています

静的初期化ブロックを作成するには、static キーワードとその後に curly のブロック ステートメント 角かっこ({}):

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

理解度をチェックする

次の説明のうち正しいものはどれですか。

静的初期化ブロックの後に宣言されたフィールドが利用可能 ブロックの内側です。
1 つのクラスに含めることができる静的初期化ブロックは 1 つのみです。
静的初期化ブロックは、クラスが 初期化されます。