أعتقد أن هذا مفيد للوصول إلى الأعضاء الساكنين:
أدناه مثال:
class A {
protected static type: string;
public log(): string {
console.log(this.type);
}
}
class B extends A {
protected static type: string = 'C';
}
class C extends A {
protected static type: string = 'C';
}
b = new B();
b.log(); // => 'B'
c = new C();
c.log(); // => 'C'
لا يمكننا القيام بذلك بالطريقة التي تقترحها نظرًا لاستخدام this.type
للوصول إلى خاصية _instance_ باسم type
، وليس خاصية _static_.
ومع ذلك ، يعمل المثال الخاص بك إذا كتبته على النحو التالي:
class A {
"constructor": typeof A; // Explicitly declare constructor property
protected static type: string;
public log() {
console.log(this.constructor.type); // Access actual constructor object
}
}
class B extends A {
protected static type: string = 'B';
}
class C extends A {
protected static type: string = 'C';
}
let b = new B();
b.log(); // => 'B'
let c = new C();
c.log(); // => 'C'
بشكل افتراضي ، تكون خاصية constructor
للمثيل من النوع Function
، ولكن يمكنك تخصيصها في فئة عن طريق التصريح عنها يدويًا. بمجرد القيام بذلك ، يمكنك الوصول إلى الإحصائيات من خلال this.constructor.xxx
، وستحصل على خصائص كائن المُنشئ الذي أنشأ المثيل بالفعل (أي كائن المُنشئ المشتق).
التعليق الأكثر فائدة
لا يمكننا القيام بذلك بالطريقة التي تقترحها نظرًا لاستخدام
this.type
للوصول إلى خاصية _instance_ باسمtype
، وليس خاصية _static_.ومع ذلك ، يعمل المثال الخاص بك إذا كتبته على النحو التالي:
بشكل افتراضي ، تكون خاصية
constructor
للمثيل من النوعFunction
، ولكن يمكنك تخصيصها في فئة عن طريق التصريح عنها يدويًا. بمجرد القيام بذلك ، يمكنك الوصول إلى الإحصائيات من خلالthis.constructor.xxx
، وستحصل على خصائص كائن المُنشئ الذي أنشأ المثيل بالفعل (أي كائن المُنشئ المشتق).