靜態初始化區塊

靜態初始化區塊是全新的 JavaScript 功能,標準化 2022 年 ECMAScript,僅適用於 新型瀏覽器。 靜態初始化區塊可讓您動態設定靜態欄位的值 例如運用橫跨多個陳述式的邏輯

如要建立靜態初始化區塊,請使用 static 關鍵字,並在後面加上 阻斷聲明 方括號 ({}):

class MyClass {
  static {}
}

這個模式可讓您初始化或變更 Deployment 主體中宣告的靜態欄位 類別:

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

隨堂測驗

以下敘述何者正確?

一個類別只能包含一個靜態初始化區塊。
可使用靜態初始化區塊之後宣告的欄位 儲存程式碼
當類別成立時,系統會評估靜態初始化區塊 會先經過初始化。