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

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

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

class MyClass {
  static {}
}

Mẫu này cho phép bạn khởi tạo 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 tạo lần đầu tiên, tức là 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 (class) đượ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 tạo tĩnh và các khối đó được đánh giá theo thứ tự khai báo, cùng với mọi trường tĩnh khác và . Tức là chỉ các trường được khai báo trước khi khởi chạy tĩnh có sẵn 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ác trường được khai báo sau khi có khối khởi động tĩnh bên trong khối.
Một lớp chỉ có thể chứa một khối khởi tạo tĩnh.
Các khối khởi động tĩnh được đánh giá khi lớp được được khởi tạo lần đầu tiên.