TGViewer
JavaScript JavaScript @javascript · 31.1K subscribers
Post #2375 4.73K
CHALLENGE

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

on(event, listener) {
if (!this.events[event]) {
this.events[event] = [];
}
this.events[event].push(listener);
return () => this.off(event, listener);
}

off(event, listener) {
if (!this.events[event]) return;
this.events[event] = this.events[event].filter(l => l !== listener);
}

emit(event, ...args) {
if (!this.events[event]) return false;
this.events[event].forEach(listener => listener(...args));
return true;
}
}

const emitter = new EventEmitter();
const unsubscribe = emitter.on('message', data => console.log(data));
emitter.emit('message', 'Hello');
emitter.emit('message', 'World');
unsubscribe();
emitter.emit('message', 'Ignored');
console.log(emitter.emit('message', 'Still ignored'));
  • ❤ 5
  • 👍 5
  • 🤔 4
  • 🤩 2
  • 🔥 1
More from @javascript
  1. Oct 5, 2026🎵 Tonny Espeset has recreated the '80s hit Take on Me by A-ha in pure JavaScript (along w…
  2. Oct 5, 2026Post #3539
  3. Oct 5, 2026CHALLENGE class Base { static log = []; static { Base.log.push('base-block'); } static val…
  4. Oct 4, 2026👀 Size Limit: A JavaScript Performance Budgeting Tool Set a size or load-time budget for…
  5. Oct 4, 2026Post #3536
  6. Oct 4, 2026CHALLENGE const compose = (...fns) => fns.reduce((f, g) => (...args) => f(g(...args))); co…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →