Наследование в JS. Как вызвать метод родителя по цепочке наследования? Имеется своя реализация системы создания и наследования "классов".
Имеется возможность наследования в виде:childClass.prototype = Object.create( parentClass.prototype );
childClass.prototype.constructor = childClass;
// Копируем методы родителя с добавлением префикса, или в спец. список
// Прописываем сверху методы наследника
childClass.prototype.parent = parentClass;
childClass.prototype.parentMethodList = parentMethodList;
childClass.prototype.childMethodList = childMethodList;
childClass.prototype.inheritedMethodList = inheritedMethodList;
Реализовываю наследование: Class1 -> Class2 -> Class3.
При инициализации Class3 произвожу инициализацию Class2, а тот в свою очередь Class1....
constructor: function()
{
...
this.parent();
...
}
Но проблема в том, что в момент инициализации Class2, область видимости this остаётся на Class3, потому последующий вызов this.parent вызываем опять инициализацию Class2 вместо Class1 (выходит просто постоянная инициализация Class2 в рекурсии).
Пытался реализовать что-то вида: childClass.prototype.parent = function( ) { new parentClass.apply( parentClass, arguments ); };
Но это всё не то.
Как выйти из данной ситуации?
Спасибо.
Листинг версии которую ковыряю: pastebin.com/iirPtLUJ

21 Авг 2019 в 07:07
205 +1
0
Ответы
1

Для вызова метода родителя по цепочке наследования в JavaScript можно воспользоваться методом call или apply.
В вашем случае, чтобы правильно вызвать метод родителя во время инициализации Class2 из Class3, можно передать контекст вызова метода родителя явно, указав this как первый аргумент метода call или apply:

constructor: function()
{
...
this.parent.call(this);
...
}

Таким образом, в момент вызова метода parent из Class2 из контекста Class3, this будет указывать на текущий экземпляр Class2, а не на Class3, и рекурсивной инициализации не произойдет.

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

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 648 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир