jquery源码学习——data(1)
网上烂多大jquery源码笔记,不过都不适合自己,想要了解还是自己去看吧。准备先从jquery数据存储开始,jquery里面的东西几乎都依赖data这个函数。事先声明,我这是看到哪里写到哪里,只是个人笔记而已。
1.先判断是否是dom对象,如果是dom对象,那么直接用jquery.cache做缓存,如果是js对象,那么直接存储在js对象里面,大家可以找一个用jquery的网站,然后在控制台输入$.cache,看看都存了啥。
2.为相应对象赋值一个唯一的id。每个js对象的id都是一样的(jQuery.expando)。每个dom的id都是不一样的,因为他们用的是相同的cach
3.data也可以存储js对象,比如var a = {'a':1};$.data(a,{'name':'duck'});这等价于$.data(a,'name','duck');
实现的小小的例子,直接放在控制台下运行,像jquery的data方法那样去调用
var gobalcache = {}; var expando = 'test' + Math.random(); var uuid = 1; var data = function(element, key, value) { var isNode = element.nodeType; var cache = null; var id = null; if (isNode) { cache = gobalcache; id = element[expando] ? element[expando] : uuid++ element[expando] = id; } else { cache = element; id = expando; } if (!cache[id]) { cache[id] = { data: {} }; } if(value !== undefined){ cache[id].data[key] = value; } return cache[id].data[key]; };