Statik başlatma blokları

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?

Statik başlatma blokları, sınıf şu durumlarda değerlendirilir: ilk kullanıma hazırlanır.
Bir sınıf yalnızca bir statik başlatma bloğu içerebilir.
Statik başlatma bloğundan sonra bildirilen alanlar kullanılabilir emin olmanız gerekir.