亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

章節
問答
課簽
筆記
評論
占位
占位

實例方法的設計

前面的第三小節留下了一個疑問:jQuery.data() 與 .data()為什么會有區別?

jQuery的方法設計大都是多用的,可以根據傳遞參數的個數判斷是set還是get處理,不僅如此jQuery還對參數的傳遞類型還抽出了一個處理的方法jQuery.access,我們可以傳遞字符串、數組、對象等等,根據這種類型自動分解成接口所有能接受的參數。

省略了部分,比如數據的過濾,HMLT5 data的處理之類,保留直接的處理,如下代碼:

jQuery.fn.extend({
    data: function(key, value) {
      return access(this, function(value) {
        // 通過access解析出參數 value的值
      }, null, value, arguments.length > 1, null, true)
    })
}

通過access解析后的參數就能讓data_user接口所接收,此時我們可以調用數據對象接口開始對數據進行存儲設置了。

this.each(function() {
   var data = data_user.get( this, camelKey );
   data_user.set( this, camelKey, value );
});

因為jQuery可以是一個元素合集,所以內部需要通過each對每一個合集都遍歷處理,

對數據的存儲內部就是調用的data_user.get緩存類的接口。

get: function(owner, key) {
  var cache = this.cache[this.key(owner)];
  return key === undefined ?
    cache : cache[key];
}

通過get方法通過key去cache中取得之前的值,如果沒有則新開辟一個空間用來存儲之后的新值,

通過data_user.set去設置這個新的值:

set: function(owner, data, value) {
  var prop,
    unlock = this.key(owner),
    cache = this.cache[unlock];
  cache[data] = value;
  return cache;
}

取出cache中對應的存儲空間,然后可見

cache[ data ] = value;

數據直接就是通過對象的鍵值對的方式存儲在內存中的。

當我們重復同一個key的時候,其實是反復操作同一個cache緩存區下的同一個key

所以當下面:

cache[‘bar’] = {
     myType: "慕課網一",
});

cache[‘bar’] = {
     myType: "慕課網二",
});

這種情況下,肯定是被覆蓋掉了。所以也就為什么通過實例的接口會覆蓋數據了。

任務

?不會了怎么辦
||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務號

綁定后可得到

  • · 粉絲專屬優惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復提醒
  • · 賬號支付安全提醒

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

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

邀請您關注公眾號
關注后,及時獲悉本課程動態

舉報

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

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發表

為什么扣積分?

本次提問將花費2個積分

繼續發表請點擊 "確定"

為什么扣積分?