JavaScript

Event Emitter (Pub/Sub)

by @admin
10h ago
Apr 28, 2026
Public
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
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.