Допустим, у меня есть 3-х классов, которые наследуют друг друга, и все отменяют тот же метод:Вызов метода базового класса (а не непосредственный родительский класс)
class Base
foo: ->
console.log 'base'
class Middle extends Base
foo: ->
console.log 'middle'
class Child extends Middle
foo: ->
console.log 'child'
Если мне нужно вызвать реализацию Middle
«S из Child
, я могу использовать super
. Но что, если мне нужно будет назвать реализацию Base
? Поддерживает ли coffescript это?
Не так далеко, насколько я знаю. Вы можете передать флаг 'Middle.foo()', чтобы сообщить ему, чтобы он возвращал 'Base.foo()' ... Но, что еще более важно, вы уверены, что это то, чего вы действительно хотите? Если 'Child' наследует от' Middle', но хочет называть 'foo' на' Base', то, возможно, 'Child' не должен наследовать от' Middle'? Или, может быть, вы не должны переопределять 'foo' вообще, а делать отдельные функции? По моему опыту, использование такого рода наследования и функции, переопределяющих слишком много, может привести к довольно запутанному коду! – Carpetsmoker
Я согласен, что это плохой дизайн. У меня есть бизнес-логика организации, представленная как дюжина классов coffescript, наследующих друг друга. Миксины были бы идеальны для такого наследования, но у coffescript их нет. –