Только начал изучать данную тему. Не совсем понимаю как это работает. На следующем примере в консоли не появляется ошибок, впрочем как и ожидаемого результата. Пример был несколько сокращен.
function App(){
function render(){}
this.run = function() {
render();
}
}
function MainWindow(){
App.call(this);
function render(){
renderFirstController();
renderSecondController();
renderThirdController();
}
this.render = render;
}
function FirstController(){
MainWindow.call(this);
function render(){
console.log("Good");
// renderFirtsBlock();
// renderSecondBlock();
// renderThirdBlock();
}
this.renderFirstController = render;
}
function ready(){
let app = new App();
app.run();
}
document.addEventListener("DOMContentLoaded", ready);
Ожидаемый результат - это метод App.render, но не пустой как при инициализации, а перегруженный (3 х 3 = 9) внутренними функциями. Кто-то посоветовал создавать экземпляры new Controller, но в таком случае я не понимаю где их создавать. Пример описывает модель дерева 1 х 3 х 3, но так же может и расшириться до 1 x N x N. В принципе в этом и заключается вопрос. Как вернуть родителю его перегруженный метод.
Вы чет все напутали и перемещали концепции
let app = new App();
Вы создаете экземпляр класс App где есть метод run, вызывающий render. Только render вызывается из замыкания и больше нигде не доступен
App.call(this);
Вот эта запись ни как на App и его экземпляры не влияет, к тому же. Метод run всегда будет вызывать только один метод render и замыкания App. Используйте классы, они уже доступны и проще
class A {
run() {
this.render()
}
render() {}
}
class B extends A {
constructor() {
super()
}
render() {
console.log('B');
}
}
const b = new B();
b.run();
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости