9. Event Emitter
СложноРеализуйте класс EventEmitter с методами on, off, emit и once для управления событиями.
Каждый способ должен быть реализован независимо в своём контейнере:
- on() подписывает listener на событие
- off() отписывает конкретный listener
- emit() вызывает все listener'ы с аргументами
- once() вызывает listener только один раз
- on/off/once возвращают this для цепочки вызовов
- emit возвращает boolean
Реализуйте класс EventEmitter со следующими методами: - on(event, listener) — подписывает listener на событие event. Возвращает this. - off(event, listener) — отписывает конкретный listener от события. Возвращает this. - emit(event, ...args) — вызывает все listener'ы для события с переданными аргументами. Возвращает true, если были слушатели. - once(event, listener) — подписывает listener, который будет вызван только один раз, а затем автоматически отписан.
Примеры
ee.on('data', fn); ee.emit('data', 42);fn вызвана с аргументом 42
emit вызывает все слушатели, зарегистрированные через on
ee.once('connect', fn); ee.emit('connect'); ee.emit('connect');fn вызвана только 1 раз
once автоматически удаляет слушатель после первого вызова
Ограничения
- Не использовать Node.js EventEmitter
- Не использовать сторонние библиотеки