Причины обязательного вызова родительского конструктора в JavaScript?
У нас имеется код с использованием ООП на js:
class FirstName {
constructor(name) {
this.name = name;
}
getSecret() {
return 'Secret';
}
}
class SecondName extends FirstName {
constructor(lastName) {
super();
this.lastName = lastName;
}
}
const user = new FirstName('FirstName');
const user2 = new SecondName('SecondName');
Мне необходимо получать в экземплярах класса только имя или только фамилию. Нет нужды видеть там и то и то, но есть необходимость иметь доступ к методу getSecret и там и там. Как это сделать используя синтаксис классов?
Предполагается, что за кадром все должно работать так:
function FirstName(name) {
this.name = name;
}
FirstName.prototype.getSecret = function() {
return 'Secret';
}
function SecondName(lastName) {
this.lastName = lastName;
}
Object.setPrototypeOf(SecondName.prototype, FirstName.prototype);
const user = new FirstName('FirstName');
const user2 = new SecondName('SecondName');
Этот синтаксис позволяет мне сделать задуманное, так как если я выведу в консоль user2 я увижу:
{lastName: "SecondName"}
При использовании первого подхода я бы увидел:
{name: undefined, lastName: "SecondName"}
Вопрос: почему в вызове конструктора дочернего класса должен быть всегда использован super() ?