内部では、JQueryは「UUID」のマップ(それが維持するカウンターjQuery.uuid
)を使用して、JavascriptからDOMのタグにプロパティをアタッチするときにブラウザーが抱えるよく知られたメモリリークの問題を回避します。そうする代わりに、JQueryはを使用して$.data(tag, name, value)
、uuid(チェックすることで判別できるキーtag[jQuery.expando]
)からキー設定されたマップにデータを格納します。
非常に便利ですが、データを$.data()
1つのグローバルバケットにダンプせずにタグにマッピングしたい場合があります。たとえば、データの長さを確認したり、ループしたりできる、独自の小さなデータバケットが必要です。
不自然な例として、クリックすると4つの状態のいずれかを回転するアイコンがあるとします。1つが状態2の場合、状態2のアイコンの配列に追加します。これを行う最も明白な方法は、タグを配列に追加することです。ただし、そうするとメモリリークが発生します。チェックボックスを呼び出すこともできます$.data()
が、それでは目的を完全に達成することはできません。すべてのチェックボックスをループして$.data()
、リストにあるチェックボックスとないチェックボックスを確認する必要があります。
タグの抽象化を配列に格納する必要があります。これがjQueryのUUIDです。独自のUUID機能を作成することもできますが、理想的には、コードサイズと品質の両方の理由から、JQueryにすでに組み込まれているUUID機能を利用するだけです。JQueryに、呼び出してUUIDをタグに暗黙的にアタッチするように依頼し、そのUUIDを取得するため$.data(tag, 'irrelevant', 1)
にチェックtag[jQuery.expando]
し、最後にそれをリストで使用することができます...しかし、それはちょっとしたハックです。本当に理想的なのは、パブリックAPIで以下を公開することです。
$.getUuid(tag)
:UUIDが存在しない場合は、それをチェックして作成します。理想的には、メソッドが除外され、$.data()
渡されたタグのuuidが作成またはフェッチされます。
それで、これがjQueryの独自のメソッドに考慮されない理由はありますか?これは何らかの形で有害ですか?それは決して有用と思われるものではなかったのでしょうか?
私が使用しているjQueryのバージョンで実際にそれを除外したことに注意する必要があり、それは非常に役立ちます。しかし、おそらく、私が使用に当たっていない根本的なリスクがあります。これを実現するプラグインも知っていますが、少し壊れています。同じUUID機能を実行するための2つのコードパスがあると、少し無駄が多く、少しもろくなります。