静态初始化块是一项全新的 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."
检查您的掌握程度
下列哪些表述是正确的?
首次初始化类时,系统会对静态初始化块进行求值。
一个类只能包含一个静态初始化块。
在静态初始化块之后声明的字段可在该块内部使用。