jQuery缓存机制(一)

1、首先看一下涉及到jQuery缓存机制的代码结构:

// 定义一些jQuery内部的变量,方便后续使用

var data_user, data_priv, // 后续会被赋值为两个Data对象
  rbrace = /(?:{[sS]*}|[[sS]*])$/,  // 匹配花括号和方括号及其中间的内容
  rmultiDash = /([A-Z])/g;//匹配大写字母

// 定义Data的构造函数

function Data() {}

// 为Data构造函数添加一个uid属性

Data.uid = 1;

// 哪些类型的对象可以使用Data存储数据的:元素节点、文档节点、Object
Data.accepts = function( owner ) {};

// 为Data构造函数绑定方法

Data.prototype = {
  key: function( owner ) {}, // 生成一个key唯一的key,这个key是通过jQuery的唯一id加上一个随机数产生的

  set: function( owner, data, value ) {}, // 向cache中写数据

  get: function( owner, key ) {}, // 从cache中拿数据
  access: function( owner, key, value ) {}, // 一个set和get的总入口?处理一些特殊情况?暂时不太了解

  remove: function( owner, key ) {}, // 从cache中删除数据

  hasData: function( owner ) {}, // 检查owner(DOM||object)上是否有数据
  discard: function( owner ) {} // 清除owner上的所有数据
};

// 内部实例化的两个Data对象。分工不同

// 使用第一个Data对象存取数据
data_user = new Data();
// 当所要存储数据的对象是DOM对象时,用来存储该对象是否设置了hasDataAttrs,仅限内部使用
data_priv = new Data();

// 为用户提供的使用$.的方式调用的接口
jQuery.extend({
  acceptData: Data.accepts, // 标记哪些元素或者对象可以使用该Data存取数据

  hasData: function( elem ) {}, // 是否有数据

  data: function( elem, name, data ) {}, // 存取数据

  removeData: function( elem, name ) {}, // 删除数据

  _data: function( elem, name, data ) {}, // 存取数据(内部使用)

  _removeData: function( elem, name ) {}, // 删除数据(内部使用)
});

// jQuery提供给用户的使用$(Obj).的方式使用的接口
jQuery.fn.extend({
  data: function( key, value ) {}, // 存取数据

  removeData: function( key ) {} // 删除数据
});

// 一个jQuery的私有方法,不绑定到任何的对象里,因为很多地方用到吗?奇怪,为什么要用这种方式写到这里?

function dataAttr( elem, key, data ) {}

2、核心问题:

  a)两个实例化的Data对象分别有什么作用

  b)Data对象内部的cache中是以怎样的形式存取数据的

  c)元素、data对象、key、cache是怎么联系起来的

原文地址:https://www.cnblogs.com/charling/p/3479345.html