Здравствуйте! У меня есть такой вот вопрос про наследование и перекрытие
методов:
Допустим, есть класс-родитель ParentClass, и его потомок ChildClass, и в
обоих есть реализация метода initialize, но с разными наборами аргументов.
Внутри ChildClass#initialize this.$super будет указывать
на ParentClass#initialize, как и было задумано. Теперь при включении модуля
в ChildClass с помощью SomeClass.include({initialize: function(){}})
в ChildClass#initialize this.$super будет указывать на предыдущую
реализацию (которая кроме как через this.$super больше никак не видна).
Собственно вопрос в том, что предыдущая реализация initialize мне никак не
нужна - я хочу полностью её заменить, и хочу
вызывать ParentClass#initialize, а он просто так уже не доступен. Что
делать? Заменять initialize без помощи include()?
И более общий вопрос: получается, что поведение this.$super зависит от
порядка включения модулей, то есть если есть два модуля с одинаково
названным методом, и такой же метод в классе-предке, но с другой сигнатурой
(другим набором аргументов), то в зависимости от порядка включения модулей
в класс-потомок в первом из модулей this.$super будет указывать на метод
класса-предка (с другой сигнатурой), а во втором - на метод первого модуля
(с той же сигнатурой). Как тут разобраться?