Что происходит в этом коде на js?

Добрый вечер!
Не пойму, для чего нужен __super__ в этом коде:
AboutController.prototype.action = function() {
    console.log('About Controller');
    return AboutController.__super__.action.call(this);
  };

Компилится из coffee -> super()
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Видно вызов перекрытого метода при прототипом наследовании.

AboutController унаследовался от другого объекта, в нем action перекрыл метод прототипа, вот потому код вызывают в перекрытом методе дабы унаследовать функционал старого.

В языках с классическим ООП для этого есть механизмы типа ключевого слова inherited. В JS же просто отдаленно эмитируется его функционал.

В AboutController.__super__ лежит ссылка на прототип объекта, от которого унаследовался этот AboutController. Это свойство устанавливается на уровне фреймворка, для возможности вызова "родительских" методов, если одноименные методы "ребенка" перекрывают методы родителя т.е имееют одинаковые имя.

У родителя есть уже метод [action] вы его перезаписали чтоб добавить свой код, но чтоб унаследовать функционал родительского метода выполняется его код через такой костыль.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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