Wpis z mikrobloga

#javascript #es6

class MyClass {}

class MySubClass extends MyClass {

constructor(){
super();
console.log('hello world');
}

}

let a = new MySubClass();

Czemu chcąc użyć konstruktora w sub-klasie muszę wywołać konstruktor rodzica za pomocą super()?
Bez tego wyrzuca błąd Uncaught ReferenceError: this is not defined.

Na prawdę to jest tak zrobione że muszę ręcznie wywołać konstruktor rodzica żeby w ogóle użyć konstruktora w sub-klasie?
  • 2
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Już wiem dlaczego. Dla klas pochodnych domyślny konstruktor to:

constructor(...args) {
super(...args);
}

Tak więc JS "w tle" dodaje domyślny konstruktor jeżeli swojego nie ustalimy. I tam zachodzi "dziedziczenie" this z klasy rodzica za pomocą super(), nie dzieje się to automatycznie tak jak na początku myślałem. Czyli nadpisując domyślny konstruktor trzeba dodać w nim super().
  • Odpowiedz