静态初始化块是一项非常新的 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."
检查您的理解
以下哪些陈述是正确的?
静态初始化块在类首次初始化时进行评估。
一个类只能包含一个静态初始化块。
在静态初始化块之后声明的字段在该块内部可用。