一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

jQuery1.5的改進(jìn)細(xì)節(jié)

  jQuery 1.5 beta1出來(lái)了,從學(xué)習(xí)跟進(jìn)上來(lái)說(shuō),這一次已經(jīng)比較晚了(我竟然不知道1.5什么時(shí)候出的alpha,就這么beta了)。

  這個(gè)1.5版本最大的更新是AJAX的完全重寫(xiě),提供了更強(qiáng)的可擴(kuò)展性。但是受制于精力和篇幅,對(duì)新的AJAX的分析還是放到下回,本篇先簡(jiǎn)單介紹一下細(xì)節(jié)方面的改進(jìn)。

  jQuery._Deferred和jQuery.Deferred

  首先不得不說(shuō)這兩個(gè)新生事物,因?yàn)樗麄兪亲鳛榛A(chǔ)設(shè)施存在,不把這兩個(gè)東西講明白了,有些問(wèn)題根本沒(méi)辦法解釋。

  首先,jQuery.Deferred是jQuery._Deferred的增強(qiáng)版,因此對(duì)于這個(gè)問(wèn)題,從jQuery._Deferred入手,就能說(shuō)明一大半的問(wèn)題。

  什么是Deferred?從字面上看,我的第一反應(yīng)是延遲加載,首字母大寫(xiě)的應(yīng)該是類(lèi)型的定義,所以這大概是一個(gè)透明提供延遲加載功能的類(lèi)型吧。然而實(shí)際上,雖然確實(shí)帶有那么一點(diǎn)點(diǎn)延遲的意思,這個(gè)東西卻不是用來(lái)實(shí)現(xiàn)延遲加載的。

  簡(jiǎn)單來(lái)說(shuō),jQuery._Deferred是一個(gè)函數(shù)隊(duì)列,他的作用有以下幾點(diǎn):

  • 保存若干個(gè)函數(shù)。
  • 在特定的時(shí)刻把保存著的函數(shù)全部執(zhí)行掉。
  • 執(zhí)行過(guò)后,新進(jìn)來(lái)的函數(shù)會(huì)立刻執(zhí)行。

  感覺(jué)是不是和啥東西很像?對(duì),jQuery的ready函數(shù)就是這樣的邏輯,實(shí)際中jQuery 1.5中的ready函數(shù)也確實(shí)被嫁接到這上面去了。

  jQuery._Deferred提供下面的接口:

  • done:function(fn1, fn2, …)的形式,用于把函數(shù)添加到隊(duì)列中。
  • fire:function(context, args)的形式,使用context指定this對(duì)象,args指定參數(shù),調(diào)用隊(duì)列中所有函數(shù)。fire被調(diào)用后,_Deferred會(huì)進(jìn)入isResolved狀態(tài),未來(lái)對(duì)done的調(diào)用不會(huì)再保存函數(shù),而是直接調(diào)用函數(shù)。
  • resolve:相當(dāng)于調(diào)用fire(this, arguments),一個(gè)簡(jiǎn)化的方法。
  • isResolved:用來(lái)判斷_Deferred是否在isResolved狀態(tài),具體參考前面的fire函數(shù)的解釋。
  • cancel:取消掉整個(gè)隊(duì)列,這樣不管未來(lái)是不是fire,隊(duì)列中的函數(shù)都不會(huì)再被調(diào)用。

  說(shuō)明白了jQuery._Deferred,再來(lái)看看jQuery.Deferred。這個(gè)東西其實(shí)就是2個(gè)_Deferred組成的,第一個(gè)稱(chēng)為deferred,用于保管正常狀態(tài)下的函數(shù);第二個(gè)稱(chēng)為failDeferred,用于保管出錯(cuò)狀態(tài)下的函數(shù)。同時(shí)jQuery.Deferred提供了一些新的接口:

  • then:function(done, fail)的形式,把done添加進(jìn)deferred,把fail添加進(jìn)failedDeferred。
  • fail:相當(dāng)于failDeferred的done函數(shù)。
  • fireReject:相當(dāng)于failDeferred的fire函數(shù)。
  • reject:相當(dāng)于failDeferred的resolve函數(shù)。
  • isRejected:相當(dāng)于failDeferred的isResolved函數(shù)。

  同時(shí)jQuery.Deferred取消了cancel函數(shù)。

  那么這個(gè)是啥用的呢?有正常和出錯(cuò)2個(gè)狀態(tài),同時(shí)又是異步的,很容易就能想到……對(duì),給AJAX用的,在下一篇分析中再詳細(xì)說(shuō)明。

  jQuery.ready的變化

  因?yàn)橛辛薺Query._Deferred這個(gè)東西,jQuery.ready函數(shù)變成依賴(lài)于函數(shù)隊(duì)列,具體的變化有:

  原來(lái)的readyList變量已經(jīng)不再是一個(gè)數(shù)組,而變成了jQuery._Deferred對(duì)象。

  原本在DOMContentLoaded時(shí),調(diào)用readList中所有函數(shù)的邏輯,現(xiàn)在也使用了jQuery._Deferred中,原來(lái)的代碼:

while ( (fn = ready[ i++ ]) ) {
fn.call( document, jQuery );
}

it知識(shí)庫(kù)jQuery1.5的改進(jìn)細(xì)節(jié),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 最新国产福利在线观看 | 九一在线观看 | 国产精品色午夜视频免费看 | 国产激情在线视频 | 天天摸天天爽视频69视频 | 国产成人精品久久一区二区小说 | 2021久久精品免费观看 | 亚洲性片| 日韩美女毛片 | 国产精品欧美一区二区三区不卡 | 91精品国产91热久久p | 成人性色大片 | 一本久道久久综合中文字幕 | 国产成人精品久久综合 | 日本一区二区三区久久久久 | 欧美一级日韩一级亚洲一级 | 热99在线视频 | 97久久精品国产成人影院 | 91精品国产免费久久久久久 | 五月丁香六月婷综合缴情在线 | 成人免费观看www视频 | 国产日产综合 | 综合亚洲一区二区三区 | 天天天做天天天天爱天天想 | 热99在线视频 | 色视频在线观看视频 | 春色视频一区二区三区 | 一区二区三区免费看 | 青青在线精品 | 看全色黄大色大片免费 | 无码精品日韩中文字幕 | 开心激情久久 | 成人在线视频网址 | 国产高清美女一级a毛片 | 缴情啪啪三级小说网 | 色婷婷一区二区三区四区成人 | 色婷婷婷婷 | 成年人视频免费在线播放 | 日韩欧美一中文字幕不卡 | 久久国产加勒比精品无码 | 久色成人 |