TGViewer
JavaScript JavaScript @javascript · 31.1K subscribers
Post #3184 2.48K
CHALLENGE


const EventEmitter = (() => {
const listeners = new WeakMap();

return class {
constructor() {
listeners.set(this, {});
}

on(event, fn) {
const map = listeners.get(this);
(map[event] ??= []).push(fn);
return this;
}

emit(event, ...args) {
const map = listeners.get(this);
(map[event] ?? []).forEach(fn => fn(...args));
return this;
}
};
})();

const bus = new EventEmitter();
const log = [];

bus
.on("data", val => log.push(`A:${val}`))
.on("data", val => log.push(`B:${val}`))
.on("done", () => log.push("done"));

bus.emit("data", 1).emit("data", 2).emit("done");

console.log(log.join(" | "));
  • ❤ 8
  • 🔥 1
More from @javascript
  1. Sep 23, 2026🤩 tinyjs: Build JavaScript Desktop Apps in <10MB I built an app with this and was impress…
  2. Sep 23, 2026Post #3513
  3. Sep 23, 2026CHALLENGE function* inner() { yield 1; yield 2; return 100; } function* outer() { const re…
  4. Sep 22, 2026Post #3511
  5. Sep 22, 2026CHALLENGE function Foo(x) { this.x = x; return { x: x * 2 }; } function Bar(x) { this.x =…
  6. Sep 21, 2026Post #3509
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 →