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