Обращение к методу прототипа родительского конструктора
Уже довольно продолжительное время не могу въехать в то, как реализовать вызов сабжа, не вызывая бесконечной рекурсии. Вопрос касается эмуляции классов.
Приводить какую-то конкретную реализацию классов не буду, все те, кто может ответить на мой вопрос видели множество таких функций. A = Class({ method: function() { console.log( 'A' ); } }); B = Class({ extend: A, method: function() { console.log( 'B' ); this.parent.method(); } }); C = Class({ extend: B, method: function() { console.log( 'C' ); this.parent.method(); } }); Поддержку работы (new B).method(); // > B, Aреализовать не проблема (при создании класса в объект parent закинуть методы, работающие с текущим контекстом). Но вот (new C).method(); // > C, B, B, B, B, B,...уже вызовет проблему: В методе класса B наличествует строка, которая запустит метод повторно, вызвав тем самым бесконечную рекурсию. Решение проблемы нашел devote, но я не смог разобраться какое именно (не смог осилить код). Аквариум тоже хвастался наличием вызова родительских методов, но из-за неадекватности персонажа и отсутствия какого-либо репозитория, решение было утеряно. Мне просто хочется избежать указания имени класса, когда я хочу вызвать метод: C.parent.method( this );Не красиво. B.prototype.method.apply( this );Еще хуже. Так можно не бояться переименовывать классы, придерживаться одного стиля и пр. PS Проблема не высосана из пальца, это поиск гармонии в коде, ведь, рано или поздно, каждый программист становится перфекционистом. |
Дзен-трансгуманист, опечатался, спасибо.
|
Цитата:
|
Дзен-трансгуманист, как?
|
Здесь надо как-то умудриться поиграться с caller (точнее с собственной реализацией), вот как, пока я не придумал.
|
Цитата:
obj.parent.parent.method(); ? |
nerv_, нет, не так.
|
тогда я не понял, что ты хочешь (читал бегло)
|
Часовой пояс GMT +3, время: 12:39. |