Khối khởi chạy tĩnh

Khối khởi chạy tĩnh là một tính năng JavaScript rất mới, được chuẩn hoá trong ECMAScript 2022 và chỉ được hỗ trợ trong các trình duyệt hiện đại. Các khối khởi động tĩnh cho phép bạn tự động đặt giá trị của các trường tĩnh, sử dụng logic trải rộng trên nhiều câu lệnh.

Để tạo một khối khởi chạy tĩnh, hãy sử dụng từ khoá static, theo sau là câu lệnh khối trong dấu ngoặc nhọn ({}):

class MyClass {
  static {}
}

Mẫu này cho phép bạn khởi chạy hoặc thay đổi các trường tĩnh được khai báo trong phần nội dung của lớp:

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

MyClass.secondProperty;
"Second property."

Các câu lệnh này được đánh giá tại thời điểm một lớp được khởi động lần đầu tiên, tức là khi công cụ JavaScript đánh giá lần đầu tiên, chứ không phải khi một thực thể của lớp được tạo, như với constructor():

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

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

Một lớp có thể chứa nhiều khối khởi chạy tĩnh và các khối đó được đánh giá theo thứ tự khai báo, cùng với mọi trường và phương thức tĩnh khác. Tức là chỉ các trường được khai báo trước khi có một khối khởi chạy tĩnh trong khối đó:

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

Kiểm tra kiến thức

Câu nào sau đây là đúng?

Các khối khởi động tĩnh được đánh giá khi lớp được khởi tạo lần đầu tiên.
Một lớp chỉ có thể chứa một khối khởi tạo tĩnh.
Các trường được khai báo sau một khối khởi động tĩnh sẽ có sẵn trong khối đó.