静态初始化块是一项非常新推出的 JavaScript 功能, ECMAScript 2022,且仅在 新型浏览器。 借助静态初始化块,您可以动态设置静态字段的值, 使用涉及多条语句的逻辑。
如需创建静态初始化块,请使用 static
关键字,后跟
Curly 中的 block 语句
括号 ({}
):
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."
检查您的理解情况
下列哪些表述是正确的?
在静态初始化块后声明的字段可用
内部的组件。
静态初始化块在类
。
一个类只能包含一个静态初始化块。