Ответ 1
jQuery добавляет это свойство к элементам, когда вы храните данные на них. Поскольку это свойство находится в элементе window
, где-то в вашем коде вы делаете что-то эквивалентное:
$(window).data('something', 1);
Обратите внимание, что события jQuery также используют модуль data
за кулисами, поэтому это также может быть связано с тем, что вы добавляете событие в объект window
.
Для обычных узлов (т.е. элементов с свойством nodeType
) это значение установлено в GUID (data.js # 61), а данные, которые вы хотите сохранить на этом объекте, хранятся в глобальном кеше jQuery.
Однако элемент window
не имеет свойства nodeType
, поэтому он идет по маршруту, я являюсь простым JS-объектом; который приводит к тому, что данные будут храниться непосредственно на самом объекте (что в случае window
может быть ошибкой с jQuery).
Выбор местоположения кеша (глобальный или объект) выполнен в L39-45 в data.js:
// 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 этому значению присваивается идентификатор GUID в data.js # 61:
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;
}
Странное значение jQuery.expando
, которое определено в data.js # 14 и инициализируется следующим образом:
"jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" )
(в основном, "jQuery", а затем версия jQuery с "." удалена (1800 в вашем случае), а затем случайное число).