// 正常寫法
/*function A(list, cb) {
setTimeout(function() {
var task = list.shift();
task(); //執(zhí)行函數(shù)
if (list.length > 0) {
setTimeout(arguments.callee, 100); // 遞歸分解
} else {
cb();
}
}, 30);
}
A([function() {
console.log('first');
}, function() {
console.log('second');
}], function() {
console.log('callback');
});*/
let cb = $.Callbacks('once');
// once的使用是使隊列只執(zhí)行一次
// add參數(shù)可以是函數(shù)或函數(shù)數(shù)組
cb.add([function() {
console.log('a');
}, function() {
console.log('b');
}]);
cb.fire(); // 執(zhí)行了once,后面的就不再觸發(fā)
/*
這是在fire的時候執(zhí)行了,self.disable
disable: function() {
list = stack = memory = undefined;
return this;
}
*/
cb.add(function(){alert(1)});
cb.fire();
// demo
function fn1(val) {
console.log(val);
}
function fn2() {
console.log('say hi ');
return false;
}
function test() {
console.log('雙擊屏幕,666');
}
let callbacks = $.Callbacks('memory');
callbacks.add(fn1);
callbacks.fire('你好');
callbacks.add(test);
callbacks.add(function(){console.log('一枝梅')})
callbacks.add(fn2); // memory 即使在沒有fire的情況,后添加到列表中的函數(shù)也能執(zhí)行
/*
就是fn2這個函數(shù)會存儲在memory變量中,然后再統(tǒng)一執(zhí)行這時memory是這樣的[fn1, test, 匿名函數(shù), fn2]
*/
let cbs = $.Callbacks('unique'); // 相同函數(shù),防止重復(fù)添加
cbs.add(test);
cbs.add(fn2);
cbs.add(test);
cbs.fire();
/*
if ( !options.unique || !self.has(arg)) { // 確保是否可以重復(fù)
list.push(arg);
}
*/
let calls = $.Callbacks('memory stopOnFalse'); // stopOnFalse 遇到函數(shù)里return false了,之后的列表就不再添加
calls.add(test);
calls.add(fn2);
calls.fire();
calls.add(function(){console.log('春江水')});
// 常規(guī)的發(fā)布訂閱
let Observe = {
callbacks: [],
add: function(fn) {
this.callbacks.push(fn)
},
fire: function() {
this.callbacks.forEach(fn => fn());
}
};
// Observe.add(function(){console.log('Jocker')});
// Observe.add(function() { console.log('mover like this')})
// Observe.fire()
回調(diào)對象 $.Callbacks()
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
推薦閱讀更多精彩內(nèi)容
- 為什么Node約定,回調(diào)函數(shù)的第一個參數(shù),必須是錯誤對象err(如果沒有發(fā)生錯誤,該參數(shù)就是null)?原因是一個...
- 關(guān)鍵詞:回調(diào)對象 語法:var call = $.Callbacks('once','memory','uniqu...
- 前言 此教程的目的是教會大家如何使用AIDL,包括定義AIDL服務(wù)、調(diào)用AIDL服務(wù)、傳遞復(fù)雜對象、AIDL回調(diào)客...
- 今天來講講 Jquery 中的回調(diào)對象這個知識點 (1) jQuery.Callbacks( flags )描述:...
- jQuery ajax 實例講解 [$.get() 定義和用法]get()方法通過遠程HTTP GET請求載入信息...