jQuery は、要素にデータを格納するときに、このプロパティを要素に追加します。このプロパティはwindow
要素上にあるため、コードのどこかで次と同等のことを行っています。
$(window).data('something', 1);
jQuery イベントもdata
バックグラウンドでモジュールを使用することに注意してください。これは、window
オブジェクトにイベントを追加していることが原因である可能性もあります。
通常のノード (つまり、nodeType
プロパティを持つ要素) の場合、この値はGUID (data.js#61) に設定され、そのオブジェクトに保存するデータはグローバル jQuery キャッシュに保存されます。
ただし、window
要素にはプロパティがないため、 I'm a plain JS objectnodeType
のルートをたどります。これにより、データがオブジェクト自体に直接保存されます ( の場合、jQueryのバグである可能性があります)。window
キャッシュの場所 (グローバルまたはオブジェクト上) の選択は、data.js の L39-45 で行われます。
// We have to handle DOM nodes and JS objects differently because IE6-7
// can't GC object references properly across the DOM-JS boundary
isNode = elem.nodeType,
// Only DOM nodes need the global jQuery cache; JS object data is
// attached directly to the object so GC can occur automatically
cache = isNode ? jQuery.cache : elem,
通常の DOM 要素の場合、値にはdata.js#61で GUID が割り当てられます。
elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++;
しかし、通常の JS オブジェクト (およびwindow
この場合) の場合、オブジェクトは68 - 74で構築されます。
cache[id] = {};
// Avoids exposing jQuery metadata on plain JS objects when the object
// is serialized using JSON.stringify
if (!isNode) {
cache[id].toJSON = jQuery.noop;
}
奇妙な値はで、これはdata.js#14jQuery.expando
で定義され、次のように初期化されます。
"jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" )
(基本的に、「jQuery」の後に「.」が削除された jQuery バージョン (この場合は 1800)、次に乱数)。