多くの jQuery プラグイン開発者が $.data 関数を使用して、ある種のアクションの状態を保存していることに気付きました。
$.data(this, 'playing', true);
プロパティをプラグイン オブジェクト インスタンスに割り当てる代わりに、次のようにします。
this.playing = true;
ここでの取引は何ですか?$.data を使用する利点はありますか?
多くの jQuery プラグイン開発者が $.data 関数を使用して、ある種のアクションの状態を保存していることに気付きました。
$.data(this, 'playing', true);
プロパティをプラグイン オブジェクト インスタンスに割り当てる代わりに、次のようにします。
this.playing = true;
ここでの取引は何ですか?$.data を使用する利点はありますか?
docsによると、循環参照によるメモリリークを回避します。
また、.data()
は、 の既存のメソッドおよびプロパティと競合しないためHTMLElement
、より将来性の高いものになります。
将来の証拠として、単純な例はaudio
/video
要素の再生状態をそのplaying
プロパティに保存することであり、コードは機能し、すべて問題ありません。そして明日、WHATWG はDOM インターフェースplaying
にプロパティを追加することを決定しHTMLMediaElement
、ブームになりました! コードが壊れているか、予期しない副作用があります。
もちろん、これは将来の競合の可能性を説明するためのばかげた例にすぎません。上記の使用例では、通常paused
は要素のプロパティを読み取るだけです。
もう 1 つの例は、value
プロパティの設定です。a でテストしてspan
正常に動作し、コードを出荷すると、別の開発者が入力要素でプラグインを呼び出そうとすると、入力の と競合しvalue
ます。この種の問題は、 を使用すると簡単に回避でき$.data
ます。
DOM 要素のカスタム プロパティにメタデータを格納するという一般的な意味で言えば、将来競合が発生する可能性は常にわずかです。多くの場合、オッズは非常に低くなりますが、将来の証拠が増え、心配することが 1 つ少なくなるのは素晴らしいことです。