บล็อกการเริ่มต้นแบบคงที่

บล็อกการเริ่มต้นแบบคงที่คือฟีเจอร์ใหม่ของ JavaScript ECMAScript 2022 และรองรับใน เบราว์เซอร์สมัยใหม่ บล็อกการเริ่มต้นแบบคงที่ให้คุณตั้งค่าช่องแบบคงที่แบบไดนามิก โดยใช้ตรรกะที่ครอบคลุมคำสั่งหลายรายการ

หากต้องการสร้างบล็อกการเริ่มต้นแบบคงที่ ให้ใช้คีย์เวิร์ด static ตามด้วย ข้อความบล็อกเป็นเส้นโค้ง เครื่องหมายวงเล็บเหลี่ยม ({}):

class MyClass {
  static {}
}

รูปแบบนี้ช่วยให้คุณเริ่มต้นหรือแก้ไขฟิลด์แบบคงที่ที่ประกาศไว้ในเนื้อหาของ ชั้นเรียน:

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

MyClass.secondProperty;
"Second property."

ระบบจะประเมินข้อความเหล่านี้เมื่อชั้นเรียนเริ่มต้นเป็นครั้งแรก ซึ่ง คือ เมื่อเครื่องมือ JavaScript ทำการประเมินเป็นครั้งแรก ไม่ใช่เมื่ออินสแตนซ์ของ สร้างชั้นเรียนแล้ว เช่นเดียวกับ constructor()

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

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

คลาสสามารถประกอบด้วยบล็อกการเริ่มต้นแบบคงที่หลายรายการ โดยบล็อกเหล่านั้น ได้รับการประเมินตามลำดับที่ประกาศ พร้อมกับช่องแบบคงที่อื่นๆ และ ซึ่งหมายความว่าจะมีเพียงฟิลด์ที่ประกาศก่อนการเริ่มต้นแบบคงที่เท่านั้น บล็อกที่ใช้ได้ในบล็อกนั้น

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

ตรวจสอบความเข้าใจ

ข้อความใดต่อไปนี้เป็นจริง

บล็อกการเริ่มต้นแบบคงที่จะได้รับการประเมินเมื่อคลาสคือ ได้เริ่มต้นครั้งแรก
คลาสจะมีบล็อกการเริ่มต้นแบบคงที่ได้เพียงบล็อกเดียว
ช่องที่ประกาศหลังจากบล็อกการเริ่มต้นแบบคงที่พร้อมใช้งานแล้ว ภายในบล็อก