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

為了賬號安全,請及時綁定郵箱和手機立即綁定

list哪來的啊

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

上面的list是從哪里來的啊,貌似沒有定義啊


正在回答

2 回答

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


摘自我正在寫的書(jQuery框架設(shè)計與實現(xiàn))部分解釋:

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

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

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對象)
4.deferred最終狀態(tài)(第三組數(shù)據(jù)除外)

如何使用?我們通過循環(huán)取出每個數(shù)組中的定義,然后賦給不同的對象去操作,這里定義2個對象 一個promise,一個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)聽的回調(diào)?done、fail、progress
?????????var?operate??????=?tuples[i][2]?//具體操作的方法?callback對象
?????????var?statusName???=?tuples[i][3]?//狀態(tài)值?resolved、rejected
?
?????????//給promise上附加done、fail、progress,
?????????//對應的回調(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ù)元組集,然后把接口與方法都混入到了對應的deferred與promise對象上了

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


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

3 回復 有任何疑惑可以回復我~

它沒寫全吧···我去看的源碼 jquert-2.0.0.js 里是這樣寫的 #前面還有一些代碼,有定義設(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 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
jQuery源碼解析(架構(gòu)與依賴模塊)
  • 參與學習       84049    人
  • 解答問題       290    個

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

進入課程
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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