@@ -318,31 +318,31 @@ obj = null;
318318このマップを` Map ` で実装してしまうと、明示的に削除されるまでイベントリスナーはメモリ上に残り続けます。
319319ここで` WeakMap ` を使うと、` addListener` メソッドに渡された` listener` は ` EventEmitter` インスタンスが参照されなくなった際、自動的に解放されます。
320320
321- {{book.console}}
322321<!-- doctest:meta:{ "ECMAScript": 2020 } -->
323322` ` ` js
324323// イベントリスナーを管理するマップ
325324const listenersMap = new WeakMap ();
326325
327326class EventEmitter {
328327 addListener (listener ) {
329- // this にひもづいたリスナーの配列を取得する
328+ // this(インスタンス) にひもづいたリスナーの配列を取得する
330329 const listeners = listenersMap .get (this ) ?? [];
331330 const newListeners = listeners .concat (listener);
332- // this をキーに新しい配列をセットする
331+ // this をキーにして、新しいリスナーの配列をセットする
333332 listenersMap .set (this , newListeners);
334333 }
334+ // ...EventEmitterには他にもメソッドがあるが省略...
335335}
336336
337- // 上記クラスの実行例
338-
339- let eventEmitter = new EventEmitter ();
340- // イベントリスナーを追加する
341- eventEmitter .addListener (() => {
342- console .log (" イベントが発火しました" );
337+ // `event`は`EventEmitter`のインスタンスへの参照をもつ
338+ let event = new EventEmitter ();
339+ // `EventEmitter`のインスタンスへイベントリスナーを追加する
340+ event .addListener (() => {
341+ // `EventEmitter`のインスタンスに紐づくイベントリスナーの処理
343342});
344- // eventEmitterへの参照がなくなったことで自動的にイベントリスナーが解放される
345- eventEmitter = null ;
343+ // `event`へ`null`を代入することで、`EventEmitter`のインスタンスへの参照がなくなる
344+ // インスタンスがどこからも参照されなくなったため、紐づいていたイベントリスナーが自動的に解放される
345+ event = null ;
346346` ` `
347347
348348また、あるオブジェクトから計算した結果を一時的に保存する用途でもよく使われます。
0 commit comments