jQuery緩存機制(一)


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是怎么聯系起來的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM