この解答例はChatGPTによって生成されています,正しいかは自己判断で。

BFE.devでのAI解答例 - JavaScript コーディング問題
16. Event Emitterを作る

class Emitter {
  constructor() {
    this.events = new Map();
  }

  // eventNameにcallbackを追加する
  subscribe(eventName, callback) {
    // もしeventsにeventNameがなければ、空のSetを作成して追加する
    if (!this.events.has(eventName)) {
      this.events.set(eventName, new Set());
    }
    // eventNameのSetに新しいcallbackを追加する
    this.events.get(eventName).add(callback);
    // サブスクリプションをリリースするためのオブジェクトを返す
    return {
      release: () => this.events.get(eventName).delete(callback),
    };
  }

  // eventNameに紐づいているすべてのcallbackをトリガーする
  emit(eventName, ...args) {
    // もしeventsにeventNameがあれば、すべてのcallbackを実行する
    if (this.events.has(eventName)) {
      this.events.get(eventName).forEach((callback) => callback(...args));
    }
  }
}

このように実装することで、自作のEvent Emitterを使ってイベントを発火したり、サブスクリプションを解除したりできます。