關(guān)于這兩個(gè)方法向胡,在看到面試題的時(shí)候湿故,我是完全完全沒(méi)有印象的(jq白學(xué)了)。稽莉。
具體還是在寫(xiě)淺拷貝的時(shí)候瀑志,在用object.assign的時(shí)候,看到一篇博主提到了$.extend污秆,我才想起來(lái)劈猪,好像確實(shí)應(yīng)該把這個(gè)知識(shí)點(diǎn)補(bǔ)充一下。
$.extend
這里提一嘴良拼,關(guān)于$.extend的作用战得,有大佬直接在帖子里寫(xiě):jQuery.extend(object);為擴(kuò)展jQuery類(lèi)本身.為類(lèi)添加新的方法。好吧庸推,這沒(méi)錯(cuò)常侦,不過(guò)我估計(jì)大多數(shù)萌新應(yīng)該和我一樣,完全沒(méi)辦法把這個(gè)和淺拷貝聯(lián)系在一起吧予弧。
$.extend刮吧,在菜鳥(niǎo)里,有更加淺顯易懂的說(shuō)法:jQuery.extend() 函數(shù)用于將一個(gè)或多個(gè)對(duì)象的內(nèi)容合并到目標(biāo)對(duì)象掖蛤。也就是說(shuō)杀捻,$.extend()方法提供的原始功能并不是僅有擴(kuò)展jq類(lèi)本身,還有合并對(duì)象蚓庭。
在$.extend中致讥,參數(shù)共有三個(gè):Boolean, target, [, objectN ]。第一個(gè)參數(shù)可選器赞,提供一個(gè)布爾值來(lái)決定方式是否深度合并對(duì)象垢袱,默認(rèn)為false。第二個(gè)target為目標(biāo)對(duì)象港柜,意思是后續(xù)所有的對(duì)象全部合并進(jìn)該對(duì)象中请契,objectN指被合并的N個(gè)對(duì)象。
所以本質(zhì)上夏醉,extend是用來(lái)合并對(duì)象的爽锥,他的用法和assign非常類(lèi)似。那么他究竟如何實(shí)現(xiàn)擴(kuò)展jq類(lèi)本身畔柔?原因在三個(gè)參數(shù)中氯夷,target目標(biāo)參數(shù)是可以被省略的,這時(shí)候target就默認(rèn)為jQuery對(duì)象本身靶擦。所以這時(shí)候腮考,后續(xù)對(duì)象就會(huì)合并進(jìn)入jQuery雇毫,因此可以用來(lái)為全局對(duì)象$添加新函數(shù)。
$.fn.extend
既然寫(xiě)了$.extend踩蔚,不寫(xiě)$.fn.extend總感覺(jué)少了什么棚放。
先說(shuō)$.fn是啥?這里寫(xiě)個(gè)代碼應(yīng)該就一目了然了:
因此寂纪,其實(shí)就是原型席吴。所以$.fn.extend就是為原型添加多個(gè)實(shí)例方法或?qū)傩浴?/p>
總結(jié):
1.$.extend可以實(shí)現(xiàn)和object.assign同樣的功能。
2.$.extend為jQuery添加靜態(tài)方法捞蛋。$.fn.extend為jQuery添加實(shí)例方法