当事件绑定顺序如下:
dataPriv.get(elem)得到的结果如下,其中elem是id为J_content的DOM节点,dataPriv.get(elem)中存放的是elem元素的相关数据(这里是绑定的事件信息)。
而dataPriv由 var dataPriv = new Data();而来,jQuery设计了缓存系统,在给元素绑定事件时,事件信息不是直接依附在dom元素上,而是将事件信息放在缓存中,与dom元素关联。这样可以有效的避免内存泄漏。
jQuery缓存设计原理
var dataPriv = new Data();
elemData = dataPriv.get( elem );使用get方法去cache中取值。
jQuery缓存的设计思路是这样的:
- 对于DOM元素,给其扩展一个属性,属性名是jQuery.expando + Data.uid++的值
- 将数据存放在该属性中,也就是该属性的属性值就是要存储的数据
- 这样在读取、设置、和移除都是操作这个属性
直观一点就是下面这样,其实就是原本要直接附加到DOM元素上的对象,附加到DOM元素一个新的属性上。
给DOM节点elem绑定事件,事件对象都存放在elem的jQuery311093659233154491051属性中
Data类
这个缓存机制的实现由Data类完成,Data类的提供的实例方法都是对扩展属性(jQuery311093659233154491051)及其对象属性的操作。