6.Data

参考文章
http://www.cnblogs.com/aaronjs/p/3370176.html

数据缓存这个东西平时可能不太有感觉,尤其是做一些简单的页面的时候,只有用到data-xx这样的存储在标签里的数据的时候,才会接触到,但还可能意识不到这是在使用jq的缓存,我以前以为$(’#dom’).data(‘data2’)就只是操作标签里的data-xx数据而已

两种形式可以定义缓存,
1.$.data('data1');
2.$('#dom').data('data2');

其中第二种如果对同一个dom进行操作是会覆盖的,而第一种不会
也就是说

var aa1 = $("body");
var aa2 = $("body");

$.data(aa1,"b","1111")
$.data(aa2,"b","2222")

$.data(aa1,"b")   //结果111111
$.data(aa2,"b")   //结果222222

aa1.data('a',1111);
aa2.data('a',2222);

aa1.data('a')  //结果222222
aa2.data('a')  //结果222222

例子摘自参考文章

首先jq中有一个叫Data的构造函数,Data上有一个静态属性uid,是用来标识属性的key,还有一个静态函数accepts,用来判断传入的参数是否可以绑定自定义数据,DOM element节点和document节点以及object是可以绑定自定义数据的

在Data.prototype上面定义了这么些函数

  1. key 返回uid,通过expando直接作为属性赋到owner(也就是例子中的aa1和aa2)上,所以操作同一个key(也就是例子中的b)是不会覆盖的,并且如果传入一个常量是无效的,比如$.data(“bla”,“b”,“1111”)
  2. set
  3. get
  4. access 根据传入的参数判断是进行get操作还是set操作
  5. remove 删除,如果不传key,会把cache[uid]赋为{},key会检查驼峰写法的对应值存不存在,存在一样删除
  6. hasData
  7. discard 删除整个cache[uid]

然后jq定义了两个Data的实例,分别是data_user和data_priv

之后就是两个extend,一个扩展在jQuery上,这个就是第一种形式,一个扩展在jQuery.fn上,这个就是第二种形式。第一种形式的函数都是对两个Data实例的函数的调用,第二种形式自己重新写了data函数,其中的注释写的很仔细,自己看的话,会遇到一个access函数,不容易理解,总之最后是调用了传给access的回调函数,第二种形式设置的值之所以会覆盖,是因为它的data函数里有这么一句elem = this[ 0 ],对着例子来说,就是aa1.data('a',1111);
aa2.data('a',2222);的时候,其实操作的都是body元素,而不是$('body'),这样就比较清楚了

这次看Data的代码的感受是,以前太不注意注释了,大概是因为个人习惯原因,一直都是先关注代码,把注释忽略掉,然后后面慢慢的会发现有些花了很多力气去看去分辨的代码逻辑,其实注释里面已经写了,争取慢慢的改进这点。

最近的业务比较多,很久没写文章,大部分时间都在写业务代码,没什么技术含量,自己看东西的时间比较少,但是也学到了一些东西,希望过段时间能有更多闲暇自己学习吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值