读jquery数据缓存

读jquery数据缓存

数据缓存在jquery中很重要,可能平时你用的未必多,但是在jquery内部很多重要模块都有用到它,记得我们之前分析过的队列queue有用到数据缓存,还有一个很重要的模块也会用到数据缓存那就是事件。

对于对比data和attr及prop最大优点那就是防止内存泄露了。jquery源码里有很多设计很巧妙的点,都值得我们去揣摩和学习的。那我们现在开始读jquery数据缓存源码之路了。

读jquery数据缓存

我们看图可以很清楚的看出,实例方法是依赖工具方法实现的而工具方法是一个数据对像实现的,所以最终的实现是面像对像的这个函数。所以我们只需看这个函数就可以了。

读jquery数据缓存

 

首先构造函数中的defineProperty的功能是防止外部修改对像,这里的意思就是防止外部修改this.cache这个对像。this.expando是产成一个带版本号的随机数这个用于向元素添加一个随机的属性,如果我们运行$.data($(".inner"),"name","5555") ,原型里的key函数的功能就是向元素添加一个自定义属性属性的值是1,在cache对像里以属性值为key添加一个空对像 cache[key]={}。原型里的set方法是找到元素的key值然后在cache[key]={"name":"555"}chche里把属性放进去。原型里的get方法是获得chche里的值。原型里的access是根据参数调用get或set方法,至于removeDate和hasDate就和它的名子一样是删除和判断元素是否有chche值。

 

读jquery数据缓存