Istnieje propozycja skryptu Stage 3 ECMAScript nazwana „Static Class Features” autorstwa Daniela Ehrenberga i Jeffa Morrisona, która ma na celu rozwiązanie tego problemu. Wraz z propozycją „Pola klas” etapu 3 przyszły kod będzie wyglądał następująco:
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();
}
}
Powyższe jest równoważne z:
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 obsługuje transpiling pól klas poprzez @ babel / plugin- offer -class-properties (zawarte w ustawieniu wstępnym stage-3 ), więc możesz użyć tej funkcji, nawet jeśli twoje środowisko wykonawcze JavaScript jej nie obsługuje.
W porównaniu do rozwiązania @ kangax polegającego na deklarowaniu metody pobierającej, to rozwiązanie może być również bardziej wydajne, ponieważ tutaj dostęp do właściwości jest uzyskiwany bezpośrednio, zamiast wywoływania funkcji.
Jeśli ta propozycja zostanie zaakceptowana, możliwe będzie pisanie kodu JavaScript w sposób bardziej podobny do tradycyjnych języków obiektowych, takich jak Java i C♯.
Edycja : ujednolicona propozycja pól klas jest teraz na etapie 3; aktualizacja do pakietów Babel v7.x.
Edycja (luty 2020 r.) : Funkcje klas statycznych zostały podzielone na inną propozycję. Dzięki @ GOTO0!