Наследование в 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
232 +1
0
Ответы
1

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

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

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

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

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир