[解決済み] JavaScriptで "弱い参照 "を作ることは可能ですか?
質問
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 アプリケーションで典型的に行われます。これらのケースでは、完全な参照カウントのスキームは必要ないかもしれません。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] GUID / UUIDの作成方法
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] javascriptで文字列から関数を作成する方法はありますか?
-
[解決済み] javascriptでオプションのパラメータを扱う
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 配列からオブジェクトを生成する
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] なぜ "use strict "はパフォーマンスを10倍向上させるのか?
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] Reactコンポーネントでthis.setStateを複数回使用するとどうなりますか?
-
[解決済み] コールバック地獄とは何か、RXはそれをどのように、そしてなぜ解決するのか?
-
[解決済み] Reactメモを使うべきではない場合とは?
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] javascriptでオプションのパラメータを扱う
-
[解決済み] <ng-content>が空かどうかを確認する方法は?(これまでのAngular 2+で)