IkaR49
@IkaR49

Как получить доступ к переопределённому методу родителя родителя (дедушке)?

Имеются следующие классы:
class A {
    foo() { alert("A"); }
}
class B extends A {
    foo() { alert("B"); }
}
class C extends B {
    foo() { alert("C"); }
    bar() { /* Здесь я хочу вызвать A::foo() */ }
}


Если в методе bar() я напишу this.foo(), то получу доступ к C::foo().
Если super.foo(), то получу доступ к B::foo().
А как всё-таки получить доступ к A::foo() из C::bar()?
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
Xuxicheta
@Xuxicheta
инженер
class A {
    foo() { alert("A"); }
}
class B extends A {
    foo() { alert("B"); }
}
class C extends B {
    foo() { alert("C"); }
    bar() { Reflect.getPrototypeOf(Reflect.getPrototypeOf(Reflect.getPrototypeOf(this))).foo(); }
}

const c = new C();

c.bar();


или
this.__proto__.__proto__.__proto__.foo.call(this)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@grinat
Через call/aply, A.prototype.foo.call(this), но никто такие вложенные классы в js не делает ибо наследование прототипное и работает медленно
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы