講了 Deferred ,現在再來看 Callbacks ,這才是本源。事實上, Deferred 機制,只是在 Callbacks 機制的上層進行了一層簡單封裝而且。 Callbacks 對象,才是真正的 jQuery 中定義的原始的回調管理機制。
var obj = $.Callbacks();
obj.add(function(){console.log('1')});
obj.add(function(){console.log('2')});
obj.fire();
Callbacks 對象的初始化支持一組控制參數:
- $.Callbacks( flags )
- 初始化一個回調管理對象。 flags 是空格分割的多個字符串,以定義此回調對象的行為:
- once 回調鏈只能被激發(fā)一次
- memory 回調鏈被激發(fā)后,新添加的函數被立即執(zhí)行
- unique 相同的回調函數只能被添加一次
- stopOnFalse 當有回調函數返回 false 時終止調用鏈的執(zhí)行
Callbacks 的控制方法:
- callbacks.add()
- 添加一個或一串回調函數
- callbacks.fire()
- 激發(fā)回調
- callbacks.remove()
- 從調用鏈中移除指定的函數
- callbacks.empty()
- 清空調用鏈
- callbacks.disable()
- 關閉調用鏈的繼續(xù)執(zhí)行,新添加的函數也不會被執(zhí)行
- callbacks.lock()
- 鎖定調用鏈,但是如果打開了 memory 的 flag ,新添加的函數仍然會執(zhí)行
- callbacks.has()
- 檢查一個函數是否處于回調鏈之中
- callbacks.fired()
- 檢查調用鏈是否已經被激發(fā)
- callbacks.locked()
- 檢查調用鏈是否被鎖定
更多建議: