最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

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

jQuery回調(diào)模塊結(jié)構(gòu)

整個$.Callbacks的源碼很少,它是一個工廠函數(shù),使用函數(shù)調(diào)用(非new,它不是一個類)創(chuàng)建對象,它有一個可選參數(shù)flags用來設置回調(diào)函數(shù)的行為,對外的接口也就是self的返回。

jQuery.Callbacks()的API列表如下:

callbacks.add()        :回調(diào)列表中添加一個回調(diào)或回調(diào)的集合。
callbacks.disable()    :禁用回調(diào)列表中的回調(diào)。
callbacks.disabled()   :確定回調(diào)列表是否已被禁用。 
callbacks.empty()      :從列表中刪除所有的回調(diào)。
callbacks.fire()       :用給定的參數(shù)調(diào)用所有的回調(diào)。
callbacks.fired()      :訪問給定的上下文和參數(shù)列表中的所有回調(diào)。 
callbacks.fireWith()   :訪問給定的上下文和參數(shù)列表中的所有回調(diào)。
callbacks.has()        :確定列表中是否提供一個回調(diào)。
callbacks.lock()       :鎖定當前狀態(tài)的回調(diào)列表。
callbacks.locked()     :確定回調(diào)列表是否已被鎖定。
callbacks.remove()     :從回調(diào)列表中的刪除一個回調(diào)或回調(diào)集合。

源碼結(jié)構(gòu):

jQuery.Callbacks = function(options) {
    options = typeof options === "string" ?
        (optionsCache[options] || createOptions(options)) :
        jQuery.extend({}, options);
    //實現(xiàn)代碼
    fire = function() {}
    self = {
        add: function() {},
        remove: function() {},
        has: function(fn) {},
        empty: function() {},
        disable: function() {},
        disabled: function() {},
        lock: function() {},
        locked: function() {},
        fireWith: function(context, args) {},
        fire: function() {},
        fired: function() {}
    };
    return self;
};

整個結(jié)構(gòu)要分三部分:

  ?   Options參數(shù)緩存

  ?   內(nèi)部fire觸發(fā)器的設計

  ?   外部

參數(shù)的緩存設計

Callbacks是可以是接受的字符串的組合傳參數(shù),可以使用空格分割,代碼如下:

var opts = 'unique memory';
var object = {}
jQuery.each(opts.match(/\S+/g) || [], function(_, flag) {
  object[flag] = true;
});

這樣的操作其實是不需要重復的,所以我們可以設計一個緩存池,用來儲存重復的操作:

var optionsCache = {};
function createOptions(options) {
  var object = optionsCache[options] = {};
  jQuery.each(options.match(rnotwhite) || [], function(_, flag) {
    object[flag] = true;
  });
  return object;
}

所以我們傳遞參數(shù)的時候,如果參數(shù)是字符串,我們可以直接從optionsCache緩存中去查找:

options = typeof options === "string" ?
        ( optionsCache[ options ] || createOptions( options ) ) :
        jQuery.extend( {}, options );

接口的設計:

通過學習了觀察者模式的思路,我們知道callback需要在內(nèi)部維護著一個list的隊列數(shù)組,用于保存訂閱的對象數(shù)據(jù)。同時也需要提供了add、remove、fire等訂閱、發(fā)布、刪除類似的接口。

那么我們代碼是不是很簡單是就是把訂閱對象給push給內(nèi)部list列表?

實現(xiàn)思路就是: 構(gòu)建一個存放回調(diào)的數(shù)組,如var list = [],通過閉包使這條回調(diào)數(shù)組保持存在。添加回調(diào)時,將回調(diào)push進list,執(zhí)行則遍歷list執(zhí)行回調(diào)。

后面幾節(jié)我們會通過簡單的模擬實現(xiàn)去剖析設計的思路。

任務

?不會了怎么辦
||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數(shù)過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務號

綁定后可得到

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

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

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

邀請您關注公眾號
關注后,及時獲悉本課程動態(tài)

舉報

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

手記推薦

更多

本次提問將花費2個積分

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

為什么扣積分?

本次提問將花費2個積分

繼續(xù)發(fā)表請點擊 "確定"

為什么扣積分?