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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

list哪來(lái)的啊

?46行,deferred[tuple[0] + "With"] = list.fireWith;

上面的list是從哪里來(lái)的啊,貌似沒(méi)有定義啊


正在回答

2 回答

慕課上由于課程的關(guān)系,有些地方可能需要看源碼,沒(méi)有很細(xì)的深入:


摘自我正在寫(xiě)的書(shū)(jQuery框架設(shè)計(jì)與實(shí)現(xiàn))部分解釋?zhuān)?/p>

? ? jQuery在代碼上的設(shè)計(jì),最喜歡的就是合并很多相似功能的代碼,達(dá)到省代碼量的目的。deferred對(duì)象中有很多的方法,但是實(shí)際上在定義的部分jQuery并沒(méi)有一個(gè)一個(gè)指定接口與對(duì)應(yīng)方法。Deferred方法中定義了一個(gè)數(shù)據(jù)元組集, 每個(gè)元組分別包含一些與當(dāng)前deferred相關(guān)的信息。

? ? ?deferred相關(guān)的數(shù)據(jù)元組集:這是一個(gè)很有抽象的合并設(shè)計(jì),promise規(guī)范指明了內(nèi)部會(huì)有三個(gè)狀態(tài)成功、失敗、進(jìn)行中,通過(guò)指定的方法來(lái)修改這些狀態(tài),那么我們?cè)诤喜⒌臅r(shí)候可以把同類(lèi)狀態(tài)與方法都寫(xiě)到一個(gè)數(shù)組中,就出現(xiàn)了這樣的一種合并設(shè)計(jì)了。

var?tuples?=?[
?????????["resolve",?"done",?jQuery.Callbacks("once?memory"),?"resolved"],
?????????["reject",?"fail",?jQuery.Callbacks("once?memory"),?"rejected"],
?????????["notify",?"progress",?jQuery.Callbacks("memory")]
]

每一組數(shù)組集,代表的意思:

1.觸發(fā)回調(diào)函數(shù)列表執(zhí)行(函數(shù)名),
2.添加回調(diào)函數(shù)(函數(shù)名)
3.回調(diào)函數(shù)列表(jQuery.Callbacks對(duì)象)
4.deferred最終狀態(tài)(第三組數(shù)據(jù)除外)

如何使用?我們通過(guò)循環(huán)取出每個(gè)數(shù)組中的定義,然后賦給不同的對(duì)象去操作,這里定義2個(gè)對(duì)象 一個(gè)promise,一個(gè)deferred。

var?promise?=?{},deferred?=?{};
for?(var?i?=?0;?i?<?tuples.length;?i++)?{
?????????var?triggerName??=?tuples[i][0]?//觸發(fā)器方法?resolve、reject、notify
?????????var?callbackName?=?tuples[i][1]?//監(jiān)聽(tīng)的回調(diào)?done、fail、progress
?????????var?operate??????=?tuples[i][2]?//具體操作的方法?callback對(duì)象
?????????var?statusName???=?tuples[i][3]?//狀態(tài)值?resolved、rejected
?
?????????//給promise上附加done、fail、progress,
?????????//對(duì)應(yīng)的回調(diào)用callback.add保存
?????????promise[?callbackName?]?=?operate.add;
?
?????????//觸發(fā)方法
?????????//?resolve、reject、reject
?????????deferred[?triggerName?]?=?function()?{
???????????????????deferred[?triggerName+?"With"?](?this?===?deferred???promise?:?this,?arguments?);
???????????????????return?this;
?????????};
?????????//resolveWith、rejectWith、rejectWith
?????????deferred[triggerName?+?"With"?]?=?operate.fireWith;
}

循環(huán)數(shù)據(jù)元組集,然后把接口與方法都混入到了對(duì)應(yīng)的deferred與promise對(duì)象上了

? ? ? ? promise與deferred對(duì)象上對(duì)應(yīng)的方法就是jQuery針對(duì)Promise規(guī)范的一種擴(kuò)展,但是核心來(lái)說(shuō)都是基于回調(diào)模式,jQuery就抽出了一個(gè)jQuery.Callbacks是模塊專(zhuān)門(mén)來(lái)處理這種回調(diào)邏輯。done|faile|progress 就是Callbacks.add方法增加一個(gè)監(jiān)聽(tīng)函數(shù), resolve、reject、notify就是觸發(fā)對(duì)應(yīng)的回調(diào),通過(guò)Callbacks. fireWith來(lái)處理。


http://img1.sycdn.imooc.com//55641c570001480606340262.jpg

3 回復(fù) 有任何疑惑可以回復(fù)我~

它沒(méi)寫(xiě)全吧···我去看的源碼 jquert-2.0.0.js 里是這樣寫(xiě)的 #前面還有一些代碼,有定義設(shè)置list#

//?Add?list-specific?methods
		jQuery.each(?tuples,?function(?i,?tuple?)?{
			var?list?=?tuple[?2?],
				stateString?=?tuple[?3?];

			//?promise[?done?|?fail?|?progress?]?=?list.add
			promise[?tuple[1]?]?=?list.add;

			//?Handle?state
			if?(?stateString?)?{
				list.add(function()?{
					//?state?=?[?resolved?|?rejected?]
					state?=?stateString;

				//?[?reject_list?|?resolve_list?].disable;?progress_list.lock
				},?tuples[?i?^?1?][?2?].disable,?tuples[?2?][?2?].lock?);
			}

			//?deferred[?resolve?|?reject?|?notify?]
			deferred[?tuple[0]?]?=?function()?{
				deferred[?tuple[0]?+?"With"?](?this?===?deferred???promise?:?this,?arguments?);
				return?this;
			};
			deferred[?tuple[0]?+?"With"?]?=?list.fireWith;
		});


2 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消
jQuery源碼解析(架構(gòu)與依賴(lài)模塊)
  • 參與學(xué)習(xí)       84047    人
  • 解答問(wèn)題       290    個(gè)

由淺入深地剖析jQuery庫(kù)的設(shè)計(jì)與實(shí)現(xiàn),揭開(kāi)框架背后的秘密

進(jìn)入課程

list哪來(lái)的啊

我要回答 關(guān)注問(wèn)題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)