Sobes.tech
Назад к вопросам
Middle
3

Реализуй класс EventEmitter: метод subscribe(event, handler) для подписки на событие и метод emit(event, data) для вызова всех подписчиков. Также реализуй метод unsubscribe.

Компании, где спрашивали
Basis

Ответ от нейросети

sobes.tech AI

javascript class EventEmitter { constructor() { this.events = {}; }

subscribe(event, handler) { if (!this.events[event]) { this.events[event] = new Set(); } this.events[event].add(handler); return { unsubscribe: () => this.unsubscribe(event, handler) }; }

emit(event, data) { if (!this.events[event]) return; for (const handler of this.events[event]) { handler(data); } }

unsubscribe(event, handler) { if (!this.events[event]) return; this.events[event].delete(handler); if (this.events[event].size === 0) { delete this.events[event]; } } }

// Пример использования: const emitter = new EventEmitter(); const sub = emitter.subscribe('message', data => console.log('Получено:', data)); emitter.emit('message', 'Привет!'); // Выведет: Получено: Привет! sub.unsubscribe(); emitter.emit('message', 'Еще раз'); // Ничего не выведет