JavaScript/WeakRef
WeakRef
オブジェクトは、ターゲットオブジェクトへの弱い参照を作成することができます。ガベージコレクションの対象となるオブジェクトへの参照を保持しつつ、そのオブジェクトのガベージコレクションを妨げないようにするために使用されます[1]。
構文
編集new WeakRef(target)
target
: 弱参照を作成する対象のオブジェクト。
メソッド
編集WeakRef.prototype.deref()
編集weakRef.deref()
弱参照のターゲットオブジェクトを返します。ターゲットオブジェクトがガベージコレクションによって回収された場合は undefined
を返します。
例
編集基本的な WeakRef の使用方法
編集以下のプログラムは、WeakRef
を使用してオブジェクトへの弱い参照を作成する方法を示しています。
let obj = { data: "重要なデータ" }; const weakRef = new WeakRef(obj); // WeakRef からオブジェクトを取得 console.log(weakRef.deref()); // { data: "重要なデータ" } // 元のオブジェクトへの参照を解除 obj = null; // この時点で、オブジェクトはガベージコレクションの対象となる可能性がある // ガベージコレクションが実行されると、weakRef.deref() は undefined を返す
このプログラムでは、WeakRef
を使用してオブジェクトへの弱い参照を作成しています。元のオブジェクトへの強い参照が無くなると、そのオブジェクトはガベージコレクションの対象となります。
FinalizationRegistry と組み合わせた使用例
編集以下のプログラムは、WeakRef
と FinalizationRegistry
を組み合わせて、オブジェクトがガベージコレクションされたときにクリーンアップ処理を行う方法を示しています。
const registry = new FinalizationRegistry((value) => { console.log(`${value} がガベージコレクションされました`); }); let obj = { data: "一時的なデータ" }; const weakRef = new WeakRef(obj); // オブジェクトを登録 registry.register(obj, "オブジェクト", weakRef); // 元のオブジェクトへの参照を解除 obj = null; // ガベージコレクションが実行されると、登録したコールバックが呼び出される
このプログラムでは、WeakRef
と FinalizationRegistry
を使用して、オブジェクトがガベージコレクションされたときに通知を受け取っています。
注意点
編集脚註
編集- ^ WeakRefは、強い参照を作成せずにオブジェクトを参照するための機能です。