มีข้อเสนอ Stage 3 ECMAScript ที่เรียกว่า"Static Class Features"โดย Daniel Ehrenberg และ Jeff Morrison ที่มีจุดมุ่งหมายเพื่อแก้ปัญหานี้ ควบคู่ไปกับข้อเสนอ"เขตข้อมูลชั้นเรียน"ขั้นที่ 3 รหัสในอนาคตจะมีลักษณะดังนี้:
class MyClass {
static myStaticProp = 42;
myProp = 42;
myProp2 = this.myProp;
myBoundFunc = () => { console.log(this.myProp); };
constructor() {
console.log(MyClass.myStaticProp);
console.log(this.myProp);
this.myBoundFunc();
}
}
ข้างต้นเทียบเท่ากับ:
class MyClass {
constructor() {
this.myProp = 42;
this.myProp2 = this.myProp;
this.myBoundFunc = () => { console.log(this.myProp); };
console.log(MyClass.myStaticProp);
console.log(this.myProp);
this.myBoundFunc();
}
}
MyClass.myStaticProp = 42;
Babel รองรับช่องคลาส Transpiling ผ่าน@ babel / plugin-offer-class-properties (รวมอยู่ในค่าที่ตั้งไว้ล่วงหน้าของ stage-3 ) เพื่อให้คุณสามารถใช้คุณสมบัตินี้ได้แม้ว่ารันไทม์ JavaScript ของคุณจะไม่รองรับก็ตาม
เมื่อเทียบกับโซลูชันของ @ kangax ในการประกาศ getter แล้วโซลูชันนี้ยังมีประสิทธิภาพมากกว่าเนื่องจากที่นี่มีการเข้าถึงคุณสมบัติโดยตรงแทนที่จะเรียกใช้ฟังก์ชัน
หากข้อเสนอนี้ได้รับการยอมรับก็จะสามารถเขียนโค้ด JavaScript ในลักษณะที่คล้ายกับภาษาเชิงวัตถุแบบดั้งเดิมเช่น Java และC♯มากขึ้น
แก้ไข : ข้อเสนอฟิลด์คลาสแบบรวมอยู่ในขั้นตอนที่ 3 อัปเดตเป็นแพ็คเกจ Babel v7.x
แก้ไข (ก.พ. 2020) : ฟีเจอร์คลาสแบบคงที่ถูกแบ่งออกเป็นข้อเสนออื่น ขอบคุณ @ GOTO0!