Greg36
#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?
  • Najlepsze
  • Wszystkie komentarze
Greg36
Greg36 Autor
2
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().
mihaubiauek