āϏā§āĻā§āϝāĻžāĻāĻŋāĻ āĻāύāĻŋāĻļāĻŋāϝāĻŧāĻžāϞāĻžāĻāĻā§āĻļāύ āĻŦā§āϞāĻ āĻšāϞ āĻāĻāĻāĻŋ āĻā§āĻŦ āύāϤā§āύ āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻŦā§āĻļāĻŋāώā§āĻā§āϝ, āϝāĻž ECMAScript 2022-āĻ āĻĒā§āϰāĻŽāĻŋāϤ āĻāĻŦāĻ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāϧā§āύāĻŋāĻ āĻŦā§āϰāĻžāĻāĻāĻžāϰ⧠āϏāĻŽāϰā§āĻĨāĻŋāϤāĨ¤ āϏā§āĻā§āϝāĻžāĻāĻŋāĻ āĻāύāĻŋāĻļāĻŋāϝāĻŧāĻžāϞāĻžāĻāĻā§āĻļāύ āĻŦā§āϞāĻ āĻāĻĒāύāĻžāĻā§ āϏā§āĻā§āϝāĻžāĻāĻŋāĻ āĻĢāĻŋāϞā§āĻĄā§āϰ āĻŽāĻžāύ āĻĄāĻžāϝāĻŧāύāĻžāĻŽāĻŋāĻāĻāĻžāĻŦā§ āϏā§āĻ āĻāϰāϤ⧠āĻĻā§āϝāĻŧ, āϞāĻāĻŋāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϝāĻž āĻāĻāĻžāϧāĻŋāĻ āϏā§āĻā§āĻāĻŽā§āύā§āĻ āĻŦāĻŋāϏā§āϤā§āϤ āĻāϰā§āĨ¤
āĻāĻāĻāĻŋ āϏā§āĻā§āϝāĻžāĻāĻŋāĻ āĻāύāĻŋāĻļāĻŋāϝāĻŧāĻžāϞāĻžāĻāĻā§āĻļāύ āĻŦā§āϞāĻ āϤā§āϰāĻŋ āĻāϰāϤā§, āĻā§āĻāĻāĻĄāĻŧāĻž āĻŦāύā§āϧāύā§āϤ⧠āĻāĻāĻāĻŋ āĻŦā§āϞāĻ āϏā§āĻā§āĻāĻŽā§āύā§āĻ āĻ
āύā§āϏāϰāĻŖ āĻāϰ⧠static
āĻā§āĻāϝāĻŧāĻžāϰā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ ( {}
):
class MyClass {
static {}
}
āĻāĻ āĻĒā§āϝāĻžāĻāĻžāϰā§āύāĻāĻŋ āĻāĻĒāύāĻžāĻā§ āĻā§āϞāĻžāϏā§āϰ āĻŽā§āϞ āĻ āĻāĻļā§ āĻā§āώāĻŋāϤ āϏā§āĻā§āϝāĻžāĻāĻŋāĻ āĻā§āώā§āϤā§āϰāĻā§āϞāĻŋ āĻļā§āϰ⧠āĻŦāĻž āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāϤ⧠āĻĻā§āϝāĻŧ:
class MyClass {
static firstProperty = 'First property.';
static secondProperty;
static {
this.secondProperty = 'Second property.';
}
}
MyClass.secondProperty;
"Second property."
āĻāĻ āĻŦāĻŋāĻŦā§āϤāĻŋāĻā§āϞāĻŋ āĻŽā§āϞā§āϝāĻžāϝāĻŧāύ āĻāϰāĻž āĻšāϝāĻŧ āϝāĻāύ āĻāĻāĻāĻŋ āĻā§āϞāĻžāϏ āĻĒā§āϰāĻĨāĻŽ āĻļā§āϰ⧠āĻšāϝāĻŧ, āĻ
āϰā§āĻĨāĻžā§, āϝāĻāύ āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻā§āĻāĻŋāύ āĻāĻāĻŋāĻā§ āĻĒā§āϰāĻĨāĻŽ āĻŽā§āϞā§āϝāĻžāϝāĻŧāύ āĻāϰā§, āϤāĻāύ āύāϝāĻŧ āϝāĻāύ āĻāĻāĻāĻŋ āĻā§āϞāĻžāϏā§āϰ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāĻŖ āϤā§āϰāĻŋ āĻāϰāĻž āĻšāϝāĻŧ, āϝā§āĻŽāύ 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."
āĻāĻĒāύāĻžāϰ āĻāĻĒāϞāĻŦā§āϧāĻŋ āĻĒāϰā§āĻā§āώāĻž āĻāϰā§āύ
āύāĻŋāĻā§āϰ āĻā§āύ āĻŦāĻŋāĻŦā§āϤāĻŋāĻāĻŋ āϏāϤā§āϝ?