Здравствуйте! У меня есть такой вот вопрос про наследование и перекрытие методов:
Допустим, есть класс-родитель 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 будет указывать на метод класса-предка (с другой сигнатурой), а во втором - на метод первого модуля (с той же сигнатурой). Как тут разобраться?