Có một đề xuất ECMAScript Giai đoạn 3 được gọi là "Tính năng lớp tĩnh" của Daniel Ehrenberg và Jeff Morrison nhằm giải quyết vấn đề này. Cùng với đề xuất "Trường lớp" Giai đoạn 3 , mã trong tương lai sẽ giống như sau:
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();
}
}
Ở trên tương đương với:
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 hỗ trợ chuyển đổi các trường lớp thông qua @ babel / plugin- suggest -class-properties (được bao gồm trong cài đặt trước giai đoạn 3 ), do đó bạn có thể sử dụng tính năng này ngay cả khi thời gian chạy JavaScript của bạn không hỗ trợ nó.
So với giải pháp khai báo getter của @ kangax, giải pháp này cũng có thể hoạt động hiệu quả hơn, vì ở đây thuộc tính được truy cập trực tiếp thay vì gọi hàm.
Nếu đề xuất này được chấp nhận, thì có thể viết mã JavaScript theo cách giống với các ngôn ngữ hướng đối tượng truyền thống như Java và C♯.
Chỉnh sửa : Đề xuất các trường lớp thống nhất hiện đang ở giai đoạn 3; cập nhật lên gói Babel v7.x.
Chỉnh sửa (tháng 2 năm 2020) : Các tính năng lớp tĩnh đã được chia thành một đề xuất khác. Cảm ơn @ GOTO0!