Daniel Ehrenberg ve Jeff Morrison'un bu sorunu çözmeyi amaçlayan "Statik Sınıf Özellikleri" adlı bir Aşama 3 ECMAScript önerisi var . Aşama 3 "Sınıf Alanları" önerisiyle birlikte, gelecekteki kod şu şekilde görünecektir:
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();
}
}
Yukarıdakiler şuna eşdeğerdir:
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 , sınıf alanlarını @ babel / eklenti-teklif-sınıf-özellikleri ( aşama-3 ön ayarına dahil edilmiştir) aracılığıyla aktarmayı destekler , böylece JavaScript çalışma zamanınız desteklemese bile bu özelliği kullanabilirsiniz.
@ Kangax'ın bir alıcı bildirme çözümüyle karşılaştırıldığında, bu çözüm aynı zamanda daha performanslı olabilir, çünkü burada özelliğe bir işlev çağırmak yerine doğrudan erişilir.
Bu öneri kabul edilirse, Java ve C♯ gibi geleneksel nesne yönelimli dillere daha benzer bir şekilde JavaScript kodu yazmak mümkün olacaktır.
Düzenleme : Birleştirilmiş bir sınıf alanları teklifi şu anda 3. aşamadadır; Babel v7.x paketlerine güncelleme.
Düzenleme (Şubat 2020) : Statik sınıf özellikleri farklı bir teklife ayrıldı. Teşekkürler @ GOTO0!