2016-04-09 54 views
0

Aşağıdaki olduğunu varsayalım:ES6 Sınıflar: süper yönteminde bir alt sınıfın uygun bir isim alın

class ThingWithWheels { 
    constructor(numWheels) { 
     this.numWheels = numWheels 
    } 
    toString() { 
     return this.constructor.name; 
    } 
} 
class Car extends ThingWithWheels { 
    constructor(color) { 
     super(4); 
     this.color = color; 
    } 
    toString() { 
     return `${this.color} ${super.toString()}`; 
    } 
} 

Bu oldukça standart Nesne Tabanlı Programlama olduğunu. Ancak, NodeJS v5.6.0'da kırmızı bir araba yapıp toString() numaralı telefonu arayarak Red Car numaralı telefon numarasını Red ThingWithWheels verecektir. Süper yöntemi çağırdığımda, this, Car değil ThingWithWheels davranır.

  1. Neden?
  2. Süper yöntemin adı doğru alması için bunu yapmanın bir yolu var mı?
+0

Aşağıdakilerden hangisi buradan devralınır? Miras göstermiyorsun. – jfriend00

+0

Eğer sınıf Araba ThingWithWheels uzanır demek, burada okuyun, daha fazla araştırma yapmak zorundasınız: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes – JordanHendrix

+0

"Genişlet" yazmayı unuttum ThingWithWheels". Davranışı değiştirmez. –

cevap

0

Bunu node.js 5.10.1'de denedim ve bana "Kırmızı Araba" verdi, bu yüzden 5.6'da bir hata olabilir.

+0

... bende ... Sanırım bir şeyle ilgileniyor olmalıyım ... –

+0

Yanlışlıkla alt sınıf yerine süper sınıfın bir örneğini oluşturduğunuzda yanlış adı aldığınız ortaya çıkıyor. * utanç yoğunlaşıyor * –