この解答例は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を使ってイベントを発火したり、サブスクリプションを解除したりできます。