Класс EventEmitter реализует простой паттерн публикации-подписки, позволяя разным частям твоего приложения взаимодействовать через именованные события.
Все слушатели хранятся в одном объекте events, где каждый ключ — это имя события, а значение — массив функций-обработчиков.
constructor() {
this.events = {};
}
on(event, listener) — Регистрирует слушателя для данного события:
||= для ленивой инициализации массива слушателей, если его ещё нетoff(event, listener) — Удаляет конкретного слушателя:
?.) для безопасной работы с несуществующими событиямиemit(event, ...args) — Вызывает всех слушателей события:
class EventEmitter {
constructor() { this.events = {}; }
on(event, listener) {
(this.events[event] ||= []).push(listener);
return this;
}
off(event, listener) {
this.events[event] = this.events[event]?.filter(l => l !== listener);
return this;
}
emit(event, ...args) {
this.events[event]?.forEach(listener => listener(...args));
return this;
}
}
Каждый метод возвращает this, что позволяет строить цепочки вызовов:
emitter.on('data', handler).emit('data', payload).off('data', handler);
off()Оператор ||= в методе on() гарантирует, что новый массив создается для события только если его еще нет, обеспечивая ленивую инициализацию.
Новый — ещё не проверен сообществом
Вы