第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

章節(jié)
問答
課簽
筆記
評(píng)論
占位
占位

Data類的設(shè)計(jì)

我們看看Data類是如何構(gòu)建這個(gè)緩存池的:

(1)先在jQuery內(nèi)部創(chuàng)建一個(gè)cache對(duì)象{}, 來保存緩存數(shù)據(jù)。 然后往需要進(jìn)行緩存的DOM節(jié)點(diǎn)上擴(kuò)展一個(gè)值為expando的屬性

function Data() {
    Object.defineProperty(this.cache = {}, 0, {
        get: function() {
            return {};
        }
    });
    this.expando = jQuery.expando + Math.random();
}

注:expando的值,用于把當(dāng)前數(shù)據(jù)緩存的UUID值做一個(gè)節(jié)點(diǎn)的屬性給寫入到指定的元素上形成關(guān)聯(lián)橋梁,所以,所以元素本身具有這種屬性的可能性很少,所以可以忽略沖突。

(2)接著把每個(gè)節(jié)點(diǎn)的dom[expando]的值都設(shè)為一個(gè)自增的變量id,保持全局唯一性。 這個(gè)id的值就作為cache的key用來關(guān)聯(lián)DOM節(jié)點(diǎn)和數(shù)據(jù)。也就是說cache[id]就取到了這個(gè)節(jié)點(diǎn)上的所有緩存,即id就好比是打開一個(gè)房間(DOM節(jié)點(diǎn))的鑰匙。 而每個(gè)元素的所有緩存都被放到了一個(gè)map映射里面,這樣可以同時(shí)緩存多個(gè)數(shù)據(jù)。

Data.uid = 1;

關(guān)聯(lián)起dom對(duì)象與數(shù)據(jù)緩存對(duì)象的一個(gè)索引標(biāo)記,換句話說,先在dom元素上找到expando對(duì)應(yīng)值,也就uid,然后通過這個(gè)uid找到數(shù)據(jù)cache對(duì)象中的內(nèi)。

(3)所以cache對(duì)象結(jié)構(gòu)應(yīng)該像下面這樣:

var cache = {
  "uid1": { // DOM節(jié)點(diǎn)1緩存數(shù)據(jù),
    "name1": value1,
    "name2": value2
  },
  "uid2": { // DOM節(jié)點(diǎn)2緩存數(shù)據(jù),
    "name1": value1,
    "name2": value2
  }
  // ......
};

每個(gè)uid對(duì)應(yīng)一個(gè)elem緩存數(shù)據(jù),每個(gè)緩存對(duì)象是可以由多個(gè)name value(名值對(duì))對(duì)組成的,而value是可以是任何數(shù)據(jù)類型的。 

如圖如示:

 

流程分解:(復(fù)雜的過濾,找重的過程去掉)

第一步:jQuery本身就是包裝后的數(shù)組結(jié)構(gòu),這個(gè)不需要解析了

第二步:通過data存儲(chǔ)數(shù)據(jù)

為了不把數(shù)據(jù)與dom直接關(guān)聯(lián),所以會(huì)把數(shù)據(jù)存儲(chǔ)到一個(gè)cache對(duì)象上
產(chǎn)生一個(gè) unlock = Data.uid++; unlock 標(biāo)記號(hào)
把unlock標(biāo)記號(hào),作為一個(gè)屬性值 賦予$body節(jié)點(diǎn)
cache緩存對(duì)象中開辟一個(gè)新的空間用于存儲(chǔ)foo數(shù)據(jù),this.cache[ unlock ] = {};
最后把foo數(shù)據(jù)掛到cache上,cache[ data ] = value;

第三步:通過data獲取數(shù)據(jù)

從$body節(jié)點(diǎn)中獲取到unlock標(biāo)記
通過unlock在cache中取到對(duì)應(yīng)的數(shù)據(jù)

流程圖:

 

任務(wù)

?不會(huì)了怎么辦
||

提問題

寫筆記

公開筆記
提交
||

請(qǐng)驗(yàn)證,完成請(qǐng)求

由于請(qǐng)求次數(shù)過多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求

加群二維碼

打開微信掃碼自動(dòng)綁定

您還未綁定服務(wù)號(hào)

綁定后可得到

  • · 粉絲專屬優(yōu)惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復(fù)提醒
  • · 賬號(hào)支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請(qǐng)您關(guān)注公眾號(hào)
關(guān)注后,及時(shí)獲悉本課程動(dòng)態(tài)

舉報(bào)

0/150
提交
取消
全部 精華 我要發(fā)布
全部 我要發(fā)布
最熱 最新
只看我的

手記推薦

更多

本次提問將花費(fèi)2個(gè)積分

你的積分不足,無法發(fā)表

為什么扣積分?

本次提問將花費(fèi)2個(gè)積分

繼續(xù)發(fā)表請(qǐng)點(diǎn)擊 "確定"

為什么扣積分?