בלוקים של אתחול סטטי הם תכונת JavaScript חדשה מאוד, המבוססת על סטנדרטיזציה של ECMAScript 2022 ונתמך רק ב- דפדפנים מודרניים. בלוקים של אתחול סטטי מאפשרים לכם להגדיר את הערך של שדות סטטיים באופן דינמי, באמצעות לוגיקה שמתפרסת על כמה הצהרות.
כדי ליצור בלוק אתחול סטטי, צריך להשתמש במילת המפתח static
ולאחר מכן
block Statement בצורה מתולתלת
סוגריים מרובעים ({}
):
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."
בדיקת ההבנה
אילו מההצהרות הבאות נכונות?