Функциональное наследование JS. Передача значения свойства потомкам

147
12 декабря 2018, 11:30

Вопрос, как передать значение свойства потомкам? В качестве примера, мне нужно чтобы все потомки сохранили контекст, однако это не сводится к проблеме потери контекста. У меня есть архитектура кода:

function App() {
   // ~ ... какие-то свойства
   let mWindow = new MainController(this), /* новый экземпляр, для примера передаем в него контекст */
       subController = new SubController();
   let event = new Event('myEvent');
   addEventListener('myEvent', function () {subController.render('add')});
   /* Важный метод */
   this.getEvent(){
      return event; /* вызывает срабатывание addEventListener -> subContrl.render() */
   };
   this.run(){
      mWindow.init();
   }
}
function MainController(app){ /* В данной строке я хочу передать что-то (Например, контекст)*/
   this.app = app; /* сохраняю это*/
   this.content_gen = function(arg) {
      dispatchEvent(this.app.getEvent("main"));
   }
};
   this.init = function (){ /* SOMETHING */};
}
function SubController(){
   MainController.call(this) /* Отнаследовали */
   this.render = function(arg) {console.log(this)}; /*this: {SubController; app = undefined}*/
   /* информация (контекст) в obj.app не передана */
   /* Понятно что я его и не передавал. Как это сделать?*/
   /* По аналогии с тем что выше, получается необходимо создать экземпляр и передать в него this.app*/
   /* Либо же сделать SubController(app), но откуда запишется значение в app??*/
}

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

Answer 1

Вам надо тогда и сам контекст передавать, ведь MainController принимает параметр

function SubController(app){
   // передаем контекст
   MainController.call(this, app) /* Отнаследовали */
   dispatchEvent(this.func)
}
READ ALSO
Как удалить данные с API по URL+ID Angularjs

Как удалить данные с API по URL+ID Angularjs

Проблема - нужно удалить комментарий с текущим ID по клику на DeleteНе могу связать ID комментария и функцию удаления

156
Приведение БД к НФ

Приведение БД к НФ

Имеется три таблицы:

194
Добавление заказа в Базу данных, и проверка на доступность

Добавление заказа в Базу данных, и проверка на доступность

Направьте на путь истинныйЕсть интернет-магазин

154