1. ホーム
  2. javascript

[解決済み] JavaScriptで "弱い参照 "を作ることは可能ですか?

2022-11-25 21:52:09

質問

JavaScript で、他のオブジェクトへの弱い参照を作成する方法はありますか? 弱参照とは何かを説明しているwikiのページがあります。 こちらはJavaで説明した別の記事です。 誰かこの動作をJavaScriptで実装する方法を思いつきますか?

どのように解決するのですか?

更新:2020年7月以降、一部の実装(Chrome、Edge、Firefox、Node.js)で、以下のサポートが追加されました。 WeakRef で定義されている WeakRefs の提案 であり、2020年12月16日時点で "Stage 3 Draft" となっています。

JavaScriptにはweakrefsの言語サポートがありません。手動で参照カウントを使用して自分でロールバックすることはできますが、特にスムーズではありません。JavaScriptのオブジェクトは、いつガベージコレクトされるか分からないので、プロキシラッパーオブジェクトを作ることはできません。

そこで、あなたの「弱い参照」は、add-reference と remove-reference メソッドを持つ単純なルックアップのキー (例えば整数) になります。そして、手動で追跡された参照がなくなったとき、エントリは削除され、そのキーで今後検索を行うと null を返すようになります。

これは本当の弱参照ではありませんが、同じ問題のいくつかを解決することができます。DOM ノードまたはイベント ハンドラ、およびクロージャのようなそれに関連付けられたオブジェクトの間に参照ループがある場合、ブラウザ (通常 IE、特に古いバージョン) からのメモリ リークを防ぐために、複雑な Web アプリケーションで典型的に行われます。これらのケースでは、完全な参照カウントのスキームは必要ないかもしれません。