Необходимо реализовать publish-subscribe pattern на классовом уровне.
То есть:
class Animal
constructor: () ->
# храним здесь подписчиков экземпляра
@pings = []
ping: (event, func) ->
# подписываемся на события экземпляра
pong: (event, data) ->
# перебираем и вызываем всех подписчиков экземпляра и !!класса!!
# храним здесь подписчиков класса
Animal.pings = []
Animal.ping = (event, func) ->
# подписываемся на события класса (т.е. !!на события всех экземпляров!! )
# Подписываемся на событие 'say'
Animal.ping('say', alert)
Проблемы начинаются при наследовании класса:
# Наследуем Animal
class Dog extends Animal
# Подписываемся на общее для класса Dog событие 'pee'
Dog.ping('pee', peeFunc)
# И на этом моменте всё ломается: вызывается функция peeFunc, которая никакого отношения к Animal не имеет.
animal = new Animal()
animal.pong('pee', {})
Так как JavaScript передает указатели на объекты, а не...
Как вернее реализовать? Сейчас остановился на функции .separate(), которую вызываю сразу после наследования от Animal и копирую массив pings родительского класса.