Причины обязательного вызова родительского конструктора в 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() ?


Ответы (0 шт):