Ответ 1
jQuery использует _data, чтобы установить флаг 'pvt' для данных, которые он хранит на объекте. pvt
используется так, что когда вы запрашиваете общедоступные данные из объекта, данные pvt не возвращаются. Это должно поддерживать внутреннее использование jQuery механизма .data()
(например, то, что делает), от использования общественного использования .data()
.
Вы можете увидеть это объявление в источнике jQuery:
// For internal use only.
_data: function( elem, name, data ) {
return jQuery.data( elem, name, data, true );
},
Который просто вызывает jQuery.data
и заставляет четвертый параметр (который является конфиденциальностью) быть истинным. При извлечении данных, если установлен флаг pvt
, он извлекается несколько иначе. Публичные интерфейсы .data()
не отображают флаг pvt
.
Ниже приведен пример обработки pvt
в этой части jQuery.data()
:
// An object can be passed to jQuery.data instead of a key/value pair; this gets
// shallow copied over onto the existing cache
if ( typeof name === "object" || typeof name === "function" ) {
if ( pvt ) {
cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
} else {
cache[ id ] = jQuery.extend(cache[ id ], name);
}
}
а затем в этой же функции этот комментарий довольно описателен:
// Internal jQuery data is stored in a separate object inside the object data
// cache in order to avoid key collisions between internal data and user-defined
// data
if ( pvt ) {
if ( !thisCache[ internalKey ] ) {
thisCache[ internalKey ] = {};
}
thisCache = thisCache[ internalKey ];
}