Blok inisialisasi statis

Blok inisialisasi statis adalah fitur JavaScript yang sangat baru, distandarisasi dalam ECMAScript 2022 dan hanya didukung di browser modern. Blok inisialisasi statis memungkinkan Anda menetapkan nilai kolom statis secara dinamis, menggunakan logika yang mencakup beberapa pernyataan.

Untuk membuat blok inisialisasi statis, gunakan kata kunci static, diikuti dengan pernyataan blok di kurawal tanda kurung ({}):

class MyClass {
  static {}
}

Pola ini memungkinkan Anda melakukan inisialisasi atau mengubah bidang statis yang dideklarasikan dalam isi kelas:

class MyClass {
  static firstProperty = 'First property.';
  static secondProperty;
  static {
    this.secondProperty = 'Second property.';
  }
}

MyClass.secondProperty;
"Second property."

Pernyataan ini dievaluasi saat class pertama kali diinisialisasi, yaitu adalah, saat mesin JavaScript pertama kali mengevaluasinya, bukan saat instance akan dibuat, seperti dengan constructor():

class MyClass {
    static {
        console.log( "Static initialization block." );
    }
    constructor() {
        console.log( "Constructor." );
    }
}
> "Static initialization block."

const myClassInstance = new MyClass();
> "Constructor."

Sebuah class dapat berisi beberapa blok inisialisasi statis, dan blok tersebut dievaluasi dalam urutan dideklarasikan, bersama dengan bidang statis lainnya dan metode. Artinya, hanya kolom yang dideklarasikan sebelum inisialisasi statis yang tersedia di blok itu:

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."

Menguji pemahaman Anda

Manakah dari pernyataan berikut yang benar?

Blok inisialisasi statis dievaluasi saat class diinisialisasi terlebih dahulu.
Class hanya dapat berisi satu blok inisialisasi statis.
Kolom yang dideklarasikan setelah blok inisialisasi statis tersedia ke dalam blok tersebut.