Как получить доступ к переопределённому методу родителя родителя (дедушке)?
Имеются следующие классы:
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()?
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)
Евгений Ромашкан, я перекладываю опыт из С++ на js, отсюда и желание создать базовый интерфейс, наследованный интерфейс и непосредственно реализацию. Я понимаю, что js не си с крестами, но привычка, она в подкорке :)
Евгений Ромашкан, вопрос был скорее теоретическим, а не реальная надобность. Тут же не виртуальные методы, а простое переопределение, вот я и решил спросить.
IkaR49, То что вы озвучили с интерфейсами - нормальная практика, а в коде который вы привели ситуация совсем другая.
P.s. "Вот так вот из буханки хлеба можно сделать троллейбус, но... Зачем?"