Обращение к методу прототипа родительского конструктора
Уже довольно продолжительное время не могу въехать в то, как реализовать вызов сабжа, не вызывая бесконечной рекурсии. Вопрос касается эмуляции классов.
Приводить какую-то конкретную реализацию классов не буду, все те, кто может ответить на мой вопрос видели множество таких функций.
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, время: 14:47. |