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

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

var data_user, data_priv, // 后续会被赋值为两个Data对象
  rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,  // 匹配花括号和方括号及其中间的内容
  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是怎么联系起来的

jQuery缓存机制(一)的更多相关文章

  1. jQuery缓存机制(三)

    缓存机制提供的入口有: $.data([key],[value]) // 存取数据 $.hasData(elem) // 是否有数据 $.removeData([key]) // 删除数据 $.acc ...

  2. (五)JS学习笔记 - JQuery缓存机制

    历史背景 开发中常常因为方便,把状态标志都写到dom节点中,也就是HTMLElement,缺点: 循环引用 直接暴露数据,安全性? 增加一堆的自定义属性标签,对浏览器来说是没意义的 取数据的时候要对H ...

  3. jQuery缓存机制(四)

    Data封装的方法的后面四个方法 和 dataAttr方法阅读. Data.prototype = { key: function( owner ) {}, set: function( owner, ...

  4. jQuery缓存机制(二)

    1.从用户调用的入口开始阅读,因为这是我们比较熟悉的部分(主要做参数的调整,根据不同的完成不同的功能) // 进入jQuery Data模块的入口 使用方法有三种,不传参,传一个参,传两个参.示例$( ...

  5. jquery源码解析:jQuery数据缓存机制详解1

    jQuery中有三种添加数据的方法,$().attr(),$().prop(),$().data().但是前面两种是用来在元素上添加属性值的,只适合少量的数据,比如:title,class,name等 ...

  6. jquery源码解析:jQuery数据缓存机制详解2

    上一课主要讲了jQuery中的缓存机制Data构造方法的源码解析,这一课主要讲jQuery是如何利用Data对象实现有关缓存机制的静态方法和实例方法的.我们接下来,来看这几个静态方法和实例方法的源码解 ...

  7. Java缓存学习之三:CDN缓存机制

    CDN是什么? 关于CDN是什么,此前网友详细介绍过. CDN是Content Delivery Network的简称,即"内容分发网络"的意思.一般我们所说的CDN加速,一般是指 ...

  8. Java缓存学习之二:浏览器缓存机制

    浏览器端的九种缓存机制介绍 浏览器缓存是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器端缓存 ...

  9. 浏览器缓存机制<转>

    转这篇文章是感觉可以在图片加载的时候,也使用这样的缓存策略   作者:吴秦出处:http://www.cnblogs.com/skynet/本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或 ...

随机推荐

  1. ibatis中 $ 于 # 的 区别?

    转自: http://www.blogjava.net/lsbwahaha/archive/2009/04/16/266026.html 一个项目中在写ibatis中的sql语句时,where use ...

  2. Linux入门基础教程之Linux系统简介

    Linux的历史: Multics项目开发不顺利,贝尔实验室退出该项目后,开发了Unix,商业化后价格昂贵.Dennis Ritchie和Ken Thompson开发了Unix内核以及C语言.Andr ...

  3. Git log和git reflog

    1.git log  log命令可以显示所有提交过的版本信息.显示信息如下: $ git log commit e1bdff6e4830e09383078c860f45334d03771b03 (HE ...

  4. Linux-centos6.8下关闭防火墙

    一.临时关闭防火墙 1. 查看防火墙的状态 [root@vpnSS ~]# /etc/init.d/iptables status Table: filter Chain INPUT (policy ...

  5. 【FastJSON】使用JSON.toJSONString()-解决FastJson中“$ref 循环引用”的问题

    fastjson 是一个 不错的json格式化工具, 但是在使用时,如果 碰到统一地址对象引用,就会用$ref替代 . 怎么去掉ref呢, 解决方法如下: String mapStr = JSONOb ...

  6. 如何获取模拟器安装的app的位置

    你可以死记下地址格式, 但是一旦不同的xcode和模拟器版本改变变了地址, 又得记, 从活动管理器里其实是可以直接查看的: Launch the app in the simulator Open A ...

  7. 什么时候layoutSubview会被调用

    文档描述不够详细,有人测试结果如下: init does not cause layoutSubviews to be called (duh) addSubview causes layoutSub ...

  8. VisualSVN错误 Cannot query proxy blanket解决办法

    最近重新做了一下系统,在安装和使用svn过程中遇到了一些问题,记下备忘. 第一次安装好系统之后,安装VisualSVN遇到报错: Custom action InstallWMISchemaExcut ...

  9. 排列2(全排列next_permutation 注意格式)

    排列2 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  10. html5页面平滑切换实现以及问题(20160120更新)

    注:本文是基于手机端 Hybrid APP 讨论,而不是普通的PC端网页 >> 之前的页面跳转方式: 比如有这两个页面:A.html  B.html,  A B 是纯HTML实现,没有采用 ...