Задать вопрос
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 родительского класса.
  • Вопрос задан
  • 2428 просмотров
Подписаться 3 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Академия Eduson
    Fullstack-разработчик на JavaScript
    11 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы