Implement Event Emitter

An Event Emitter is a design pattern that allows objects to emit named events and register listeners for those events. This is fundamental to understanding how many JavaScript libraries and frameworks work.

Problem Statement

Implement a custom EventEmitter class with the following methods:

  • on(event, listener) - Register a listener for an event
  • off(event, listener) - Remove a listener for an event
  • emit(event, ...args) - Emit an event with optional arguments
  • once(event, listener) - Register a one-time listener