0

多くの jQuery プラグイン開発者が $.data 関数を使用して、ある種のアクションの状態を保存していることに気付きました。

$.data(this, 'playing', true);

プロパティをプラグイン オブジェクト インスタンスに割り当てる代わりに、次のようにします。

this.playing = true;

ここでの取引は何ですか?$.data を使用する利点はありますか?

4

1 に答える 1

3

docsによると、循環参照によるメモリリークを回避します。

また、.data()は、 の既存のメソッドおよびプロパティと競合しないためHTMLElement、より将来性の高いものになります。


将来の証拠として、単純な例はaudio/video要素の再生状態をそのplayingプロパティに保存することであり、コードは機能し、すべて問題ありません。そして明日、WHATWG はDOM インターフェースplayingにプロパティを追加することを決定しHTMLMediaElement、ブームになりました! コードが壊れているか、予期しない副作用があります。

もちろん、これは将来の競合の可能性を説明するためのばかげた例にすぎません。上記の使用例では、通常pausedは要素のプロパティを読み取るだけです。

もう 1 つの例は、valueプロパティの設定です。a でテストしてspan正常に動作し、コードを出荷すると、別の開発者が入力要素でプラグインを呼び出そうとすると、入力の と競合しvalueます。この種の問題は、 を使用すると簡単に回避でき$.dataます。

DOM 要素のカスタム プロパティにメタデータを格納するという一般的な意味で言えば、将来競合が発生する可能性は常にわずかです。多くの場合、オッズは非常に低くなりますが、将来の証拠が増え、心配することが 1 つ少なくなるのは素晴らしいことです。

于 2014-03-06T22:15:48.957 に答える