JavaScript: как обратится к методу родителя при каскадном наследовании?

Здравствуйте. Изучаю ООП JavaScript, проверяю задачу про вложение наследований. Имею классы grandfater, fater, i, которые наследуются друг от друга. У каждого класса метод getFullName(), который выводит "Имя Фамилия" в консоль, для дедушки просто "Имя Фамилия", для папы "Имя Фамилия (СССР)", а для внука "Имя Фамилия (Россия)". Суть в том, что метод папы и внука должны использовать метод getFullName() дедушки + дописывать свою строку.

У папы все получается return super.getFullName() + " (СССР)" работает, а у внука обратится к дедушкиному методу не получатся. В пособии сказано, что должно сработать super.super.getFullName() + " (Россия)", но оно не работает. И вот вопрос: как обратится к методу родителя из потомка потомка?

Код прилагаю. Буду благодарен за любую помощь.

class Grandfater {
  constructor(name, surname) {
    this.name = name;
    this.surname = surname;
  }
  getFullName() {
    return this.name + " " + this.surname;
  }
}

class Fater extends Grandfater {
  constructor(name, surname, status) {
    super(name, surname);
    this.status = status;
  }
  getFullName() {
    return super.getFullName() + " (СССР)";
  }
}

class Son extends Fater {
  constructor(name, surname, status, age) {
    super(name, surname, status);
    this.age = age;
  }
  getFullName() {
    return super.super.getFullName() + " (Россия)";        // вот эта строка не работает
  }
}

var ded = new Grandfater("Василий", "Михайлов");
console.log(ded.getFullName());

var papa = new Fater("Николай", "Михайлов", "коммунист");
console.log(papa.getFullName());

var i = new Son("Максимка", "Михайлов", "коммунист", 5);
console.log(i.getFullName());
  • Вопрос задан
  • 165 просмотров
Решения вопроса 1
potapchino
@potapchino
return new Grandfater().getFullName.call(this) + " (Россия)";


return Grandfater.prototype.getFullName.call(this) + " (Россия)";
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы