Aliceloves
@Aliceloves

Как реализовать publish–subscribe pattern на классовом уровне?

Необходимо реализовать 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 родительского класса.
  • Вопрос задан
  • 2427 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы