В основе: Написать реализацию EventEmitter с некоторыми улучшениями и примесь для использования его API. Сам EventEmitter - глобальный синглетон.
API класса:
- emit(eventName, payload): инициирует событие eventName с данными payload
- on(eventName, handler): подписывает обработчик события handler на событие eventName.
- off(eventName, handler): отписывает обработчик события handler от события eventName
Пример использования:
const EventEmitter = ...
const handler = (msg) => console.log(msg)
EventEmitter.on('greet', handler)
EventEmitter.emit('greet', 'Hello, World!') // выводит в консоль Hello, World!
EventEmitter.off('greet', handler)
EventEmitter.emit('greet', 'Hello, World!') // ничего не выводит