• 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是怎么联系起来的

  • 相关阅读:
    从国内流程管理软件市场份额看中国BPM行业发展
    为什么流程是成功企业的关键?
    港真,到底应该选择OA还是BPM?
    hello world
    i40e网卡驱动遇到的一个问题
    suse 11 sp3编译报错问题
    linux scsi相关的一些学习笔记
    linux tcp 在timewait 状态下的报文处理
    趋势科技 redirfs模块的一个小问题
    linux 3.10 一个扇区异常可能引发的hung
  • 原文地址:https://www.cnblogs.com/charling/p/3479345.html
Copyright © 2020-2023  润新知