It's about JS class from MDN page. I don't understand why Bad class has a reference error. Is it because empty constructor of Bad class calls super() as a default?
class Base {}
class Good extends Base {}
class AlsoGood extends Base {
constructor() {
return {a: 5};
}
}
class Bad extends Base {
constructor() {}
}
new Good();
new AlsoGood();
new Bad(); // ReferenceError
To avoid getting this error you must either remove constructor from the class or call super() inside the constructor of the Bad class
Is it because empty constructor of Bad class calls super() as a default?
No - if the empty constructor did call super by default, you wouldn't be seeing the error.
A derived class's constructor, if it exists, must call the parent's constructor with super.
If a derived class lacks any constructor at all, super will be called automatically. That is
class Good extends Base {
}
is equivalent to
class Good extends Base {
constructor(...args) {
super(...args);
}
}
The same does not extend to empty constructors - if the constructor is present, super does not get called automatically - but super must be called.