jQuery.data和jQuery._data(下划线数据)有什么区别?

在浏览源代码时,我注意到’toggle’应该使用jQuery._data来存储元素的状态。 我检查了chrome中的jQuery.cache对象,发现元素的数据对象下面还有另一个对象,它由jQuery一词前面加上一个我猜是唯一标识它的数字。 但是,我没有看到关于元素状态的数据。 简单{olddisplay: 'block'} 。 关于jQuery._data的目的以及它本身如何工作的任何线索?

我一整天都在盯着源头……请不要告诉我查看来源。 我的眼睛和大脑会感谢你。

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标志, pvt稍微不同的方式检索它。 .data()的公共接口不公开pvt标志。

你可以在jQuery.data()这一部分看到一个pvt处理的例子:

 // 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's 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 ]; }