Функциональное наследование JS (return overloaded method to parent)

174
27 ноября 2018, 23:40

Только начал изучать данную тему. Не совсем понимаю как это работает. На следующем примере в консоли не появляется ошибок, впрочем как и ожидаемого результата. Пример был несколько сокращен.

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. В принципе в этом и заключается вопрос. Как вернуть родителю его перегруженный метод.

Answer 1

Вы чет все напутали и перемещали концепции

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();
READ ALSO
Slick slider прижимает картинки вправо

Slick slider прижимает картинки вправо

Всем привет! Столкнулся с проблемкойВоткнул слик-слайдер на карточку в интернет магазине (блок рекомендуемое для каждого отдельного товара...

170
Vuex ,вынесение в store

Vuex ,вынесение в store

Всем привет,у меня есть вот такой поиск по элементов и получение данных из api в компоненте,не могу понять,как вынести это в экшены стора,хотябы...

144
с какой стороны блока пришла мышь javascript

с какой стороны блока пришла мышь javascript

Подскажите пожалуйста как на чистом javascript реализовать появление фона с определенной стороны при навелении мыши https://wwwcartoonnetwork

134
получить позицию строки по сортировке

получить позицию строки по сортировке

В таблице у каждой стройки есть уникальный текст(id), можно отсортировать строки по разным значениям, как получить расположение строки относительно...

166