Ada proposal ECMAScript Tahap 3 yang disebut "Fitur Kelas Statis" oleh Daniel Ehrenberg dan Jeff Morrison yang bertujuan untuk memecahkan masalah ini. Bersama dengan proposal "Bidang Kelas" Tahap 3 , kode masa depan akan terlihat seperti ini:
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();
}
}
Di atas sama dengan:
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 mendukung transpiling bidang kelas melalui @ babel / plugin-proposal-class-properties (disertakan dalam preset stage-3 ), sehingga Anda dapat menggunakan fitur ini meskipun runtime JavaScript Anda tidak mendukungnya.
Dibandingkan dengan solusi @ kangax untuk mendeklarasikan getter, solusi ini juga bisa lebih berkinerja, karena di sini properti diakses secara langsung daripada melalui pemanggilan fungsi.
Jika proposal ini diterima, maka dimungkinkan untuk menulis kode JavaScript dengan cara yang lebih mirip dengan bahasa berorientasi objek tradisional seperti Java dan C♯.
Edit : Proposal bidang kelas terpadu sekarang berada di tahap 3; perbarui ke paket Babel v7.x.
Sunting (Feb 2020) : Fitur kelas statis telah dibagi menjadi proposal yang berbeda. Terima kasih @ GOTO0!