jQuery源码解析-----jQuery数据缓存系统

来源:互联网 发布:宣传淘宝店铺广告词 编辑:程序博客网 时间:2024/06/05 22:53
//jQuery缓存系统静态方法与实例方法的区别
jQuery.data(ele)与$(ele).data()
这两个函数都是用来在元素上存放数据,也就是平时所说的数据缓存,都返回jQuery对象,初学的时候很容易让人混淆,尤其是给dom元素添加缓存数据的时候。
简单的来说:
1.jQuery.data()可以实现为dom元素或js对象添加缓存
2.$("ele").data()实是对前者的扩展,其目的是可以方便的通过选择器为多个dom元素添加缓存数据。
虽然大体的意思一样,但是2个接口在处理上却有差别,也是我们容易忽视的。


//缓存的设计思路
jQuery缓存设计接口对数据的处理有如下几种方式:
用name和value为对象附加数据:
一个对象为对象附加数据
为DOM Element附加数据
设计思路:
常规的数据缓存,我们都大多为了方便直接就绑定到了dom对应的元素上面了,最为常见的就是事件对象的回调函数了,还有一些DOM的属性。当然这也不是不可以,jQuery早期就这么干的,但是容易引发循环引用,也会带来一定的全局污染问题。那么jQuery在之后的改进就独立出了一个“数据缓存”模块。
其核心的关键就是:
数据存放在内存中,通过一个映射关系与dom元素发生关联。
数据缓存,jQuery现在支持两种:
(1)dom元素,数据存储在jQuery.cache中
(2)普通js对象,数据存储在该对象中。
首先先要在内存中开辟一个区域,用来保存数据。
(1)如果是DOM元素,通过分配一个唯一的关联id把DOM元素和该DOM元素的数据缓存对象关联起来,关联id被附加到以jQuery.expando的值命名的属性上,数据存储在全局缓存对象jQuery.cache中。在读取,设置,移除数据的时候,将通过全局缓存对象jQuery.cahce中找到关联的数据缓存对象,然后在数据缓存对象上执行读取、设置、移除操作。
(2)如果是js对象,数据则直接存储在该js对象的属性上。在读取、设置、移除数据的时候,实际上是对js对象的数据缓存对象执行读取、设置、移除操作。
(3)为了避免jQuery内部使用的数据和用户自定义的数据发生冲突,数据缓存模块吧内部数据存储在数据缓存对象上,把自定义数据存储在数据缓存对象的属性data上。
所以jQuery在数据缓存的处理抽出一个Data类出来,通过2组不同的实例,分别处理不同个处理类型:
var data_priv = new Data();
var data_user = new Data();
一个是给jQuery内部使用,比如数据对象,queue,Defered,事件、动画缓存
另一个对象data_user是提供给开发者使用的,比如$.attr(),$.data等等
0 0
原创粉丝点击