Statik başlatma blokları, tablodaki çok yeni bir JavaScript özelliğidir. ECMAScript 2022 ve yalnızca modern tarayıcılar bulunuyor. Statik başlatma blokları, statik alanların değerini dinamik olarak ayarlamanıza olanak tanır. bir mantık kullanmaktır.
Statik başlatma bloğu oluşturmak için static
anahtar kelimesini ve ardından bir tane kullanın.
kıvrık blok ifadesi
köşeli parantezler ({}
):
class MyClass {
static {}
}
Bu kalıp, gövdesinde tanımlanan statik alanları ilk kullanıma hazırlamanızı veya değiştirmenizi sağlar sınıf:
class MyClass {
static firstProperty = 'First property.';
static secondProperty;
static {
this.secondProperty = 'Second property.';
}
}
MyClass.secondProperty;
"Second property."
Bu ifadeler, sınıfın ilk başlatıldığı anda değerlendirilir.
olduğunda, bir örneği olduğunda değil, JavaScript motoru tarafından
sınıfı, constructor()
örneğinde olduğu gibi oluşturulur:
class MyClass {
static {
console.log( "Static initialization block." );
}
constructor() {
console.log( "Constructor." );
}
}
> "Static initialization block."
const myClassInstance = new MyClass();
> "Constructor."
Bir sınıf birden fazla statik başlatma bloğu içerebilir. Bu bloklar tüm statik alanlarla birlikte bildirildikleri sıraya göre değerlendirilirler. yöntemlerine göz atın. Bu durumda, yalnızca statik başlatma işleminden önce bildirilen alanlar o blokta mevcut:
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."
Öğrendiklerinizi sınayın
Aşağıdaki ifadelerden hangisi doğrudur?