Typescript: أعضاء الميراث والثابت

تم إنشاؤها على ٨ ديسمبر ٢٠١٥  ·  1تعليق  ·  مصدر: microsoft/TypeScript

أعتقد أن هذا مفيد للوصول إلى الأعضاء الساكنين:

  • من الحالات
  • من الطبقات الفرعية

أدناه مثال:

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'
By Design Declined Suggestion

التعليق الأكثر فائدة

لا يمكننا القيام بذلك بالطريقة التي تقترحها نظرًا لاستخدام 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_.

ومع ذلك ، يعمل المثال الخاص بك إذا كتبته على النحو التالي:

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 ، وستحصل على خصائص كائن المُنشئ الذي أنشأ المثيل بالفعل (أي كائن المُنشئ المشتق).

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

siddjain picture siddjain  ·  3تعليقات

Roam-Cooper picture Roam-Cooper  ·  3تعليقات

CyrusNajmabadi picture CyrusNajmabadi  ·  3تعليقات

Antony-Jones picture Antony-Jones  ·  3تعليقات

blendsdk picture blendsdk  ·  3تعليقات