靜態初始化區塊是全新的 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."
隨堂測驗
以下敘述何者正確?
一個類別只能包含一個靜態初始化區塊。
可使用靜態初始化區塊之後宣告的欄位
儲存程式碼
當類別成立時,系統會評估靜態初始化區塊
會先經過初始化。