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

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

jQuery回調(diào)對(duì)象

jQuery.Callbacks一般開(kāi)發(fā)者接觸的很少,雖然jQuery向開(kāi)發(fā)者提供了外部接口調(diào)用,但是$.Callbacks()模塊的開(kāi)發(fā)目的是為了給內(nèi)部$.ajax() 和 $.Deferred()模塊提供統(tǒng)一的基本功能組件。它可以用來(lái)作為類似基礎(chǔ)定義的新組件的功能。

jQuery.Callbacks是jquery在1.7版本之后加入的,是從1.6版中的_Deferred對(duì)象中抽離的,主要用來(lái)進(jìn)行函數(shù)隊(duì)列的add、remove、fire、lock等操作,并提供once、memory、unique、stopOnFalse四個(gè)option進(jìn)行一些特殊的控制。

這個(gè)函數(shù)常見(jiàn)的應(yīng)用場(chǎng)景是事件觸發(fā)機(jī)制,也就是設(shè)計(jì)模式中的觀察者模式的發(fā)布、訂閱機(jī)制,目前Callbacks對(duì)象用于queue、ajax、Deferred對(duì)象中,本小節(jié)主要是一些簡(jiǎn)單的例子去理解的使用。

我們看官網(wǎng)提供的demo:

function fn1(value) {
  console.log(value);
}

function fn2(value) {
  fn1("fn2 says: " + value);
  return false;
}

可以將上述兩個(gè)方法作為回調(diào)函數(shù),并添加到 $.Callbacks 列表中,并按下面的順序調(diào)用它們:

var callbacks = $.Callbacks();
callbacks.add(fn1);
// outputs: foo!
callbacks.fire("foo!");
callbacks.add(fn2);
// outputs: bar!, fn2 says: bar!
callbacks.fire("bar!")

這樣做的結(jié)果是,當(dāng)構(gòu)造復(fù)雜的回調(diào)函數(shù)列表時(shí),將會(huì)變更很簡(jiǎn)單。可以根據(jù)需要,很方面的就可以向這些回調(diào)函數(shù)中傳入所需的參數(shù)。

上面的例子中,我們使用了 $.Callbacks() 的兩個(gè)方法: .add() 和 .fire()。 .add() 和 .fire() .add() 支持添加新的回調(diào)列表, 而.fire() 提供了一種用于處理在同一列表中的回調(diào)方法的途徑。

另一種方法是$.Callbacks 的.remove()方法,用于從回調(diào)列表中刪除一個(gè)特定的回調(diào)。下面是.remove()使用的一個(gè)例子:

var callbacks = $.Callbacks();
callbacks.add( fn1 );
// outputs: foo!
callbacks.fire( "foo!" );
callbacks.add( fn2 );
// outputs: bar!, fn2 says: bar!
callbacks.fire( "bar!" );
callbacks.remove( fn2 );
// only outputs foobar, as fn2 has been removed.
callbacks.fire( "foobar" );

這個(gè)運(yùn)用內(nèi)部就是觀察者模式的一種設(shè)計(jì)實(shí)現(xiàn),只是相對(duì)比較復(fù)雜。我們看看jQuery的回調(diào)函數(shù)到底為哪些模塊服務(wù)?

異步隊(duì)列模塊:

Deferred: function(func) {
  var tuples = [
    // action, add listener, listener list, final state
    ["resolve", "done", jQuery.Callbacks("once memory"), "resolved"],
    ["reject", "fail", jQuery.Callbacks("once memory"), "rejected"],
    ["notify", "progress", jQuery.Callbacks("memory")]
  ],………….

隊(duì)列模塊

_queueHooks: function(elem, type) {
  var key = type + "queueHooks";
  return data_priv.get(elem, key) || data_priv.access(elem, key, {
    empty: jQuery.Callbacks("once memory").add(function() {
      data_priv.remove(elem, [type + "queue", key]);
    })
  });
}

Ajax模塊

ajax: function(url, options) {
  //省略代碼
  deferred = jQuery.Deferred(),
  completeDeferred = jQuery.Callbacks("once memory")
    ..............
}

不難發(fā)現(xiàn)jQuery.Callbacks還提供“once memory”等參數(shù)用來(lái)處理:

   ?  once: 確保這個(gè)回調(diào)列表只執(zhí)行( .fire() )一次(像一個(gè)遞延 Deferred)。

   ?  memory: 保持以前的值,將添加到這個(gè)列表的后面的最新的值立即執(zhí)行調(diào)用任何回調(diào) (像一個(gè)遞延 Deferred)。

   ?  unique: 確保一次只能添加一個(gè)回調(diào)(所以在列表中沒(méi)有重復(fù)的回調(diào))。

   ?  stopOnFalse: 當(dāng)一個(gè)回調(diào)返回false 時(shí)中斷調(diào)用。

var callbacks = $.Callbacks('once');

callbacks.add(function() {
  alert('a');
})

callbacks.add(function() {
  alert('b');
})

callbacks.fire(); //輸出結(jié)果: 'a' 'b'
callbacks.fire(); //未執(zhí)行

once的作用是使callback隊(duì)列只執(zhí)行一次。

OK,我們大概知道這個(gè)是干嘛用的了,可以開(kāi)始上正菜了,(下一節(jié)開(kāi)始噢!)

任務(wù)

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

提問(wèn)題

寫筆記

公開(kāi)筆記
提交
||

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

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

加群二維碼

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

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

綁定后可得到

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

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

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

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

舉報(bào)

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

手記推薦

更多

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

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

為什么扣積分?

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

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

為什么扣積分?