JavaScript

Event Emitter (Pub/Sub)

admin by @admin ADMIN
5d ago
Apr 28, 2026
Public
0 0 up · 0 down Sign in to vote
A lightweight publish/subscribe event system. Listeners register with on(), fire once with once(), are removed with off(), and events are dispatched with emit(). Useful for decoupling modules, building plugin systems, and implementing the Observer pattern without a framework dependency.
JavaScript
Raw
class EventEmitter {
  #events = {};

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

  once(event, listener) {
    const wrapper = (...args) => { listener(...args); this.off(event, wrapper); };
    return this.on(event, wrapper);
  }

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

  emit(event, ...args) {
    (this.#events[event] ?? []).forEach((l) => l(...args));
  }
}

// Usage
const bus = new EventEmitter();
const off = bus.on('data', (d) => console.log('received:', d));
bus.emit('data', { id: 1 }); // received: { id: 1 }
off(); // unsubscribe
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.