рд╕реНрдЯреИрдЯрд┐рдХ рдЗрдирд┐рд╢рд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдмреНрд▓реЙрдХ, 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."
рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рддрдирд╛ рд╕рдордЭ рдЖрдпрд╛ рд╣реИ
рдЗрдирдореЗрдВ рд╕реЗ рдХреМрдирд╕реА рдмрд╛рддреЗрдВ рд╕рд╣реА рд╣реИрдВ?