selector = selector || document 暗示了如果$(),那么就相當(dāng)于$(document)
selector.nodeType用來(lái)判斷是否是一個(gè)domElement對(duì)象,如果是直接將本對(duì)象包裝成jquery對(duì)象返回,這里要說(shuō)明一 點(diǎn),實(shí)際jquery對(duì)象是一個(gè)偽數(shù)組或者說(shuō)是一個(gè)功能異常強(qiáng)大的集合,你可以通過(guò)下標(biāo)去訪問(wèn)里面的元素和length屬性,但它不會(huì)像數(shù)組一樣去幫你維 護(hù)里面的元素,比如你將length設(shè)為空,它不會(huì)幫你將里面的元素清空,因?yàn)樗且粋€(gè)偽造的。
if ( typeof selector == "string" ) {
....
}else if ( jQuery.isFunction( selector ) )
return jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector );
return this.setArray(jQuery.makeArray(selector));
判斷是否是字符串,情況比較多,稍后討論,先看簡(jiǎn)單的,好像也不太簡(jiǎn)單
jQuery.isFunction( selector ) 判斷傳進(jìn)來(lái)的是否是一個(gè)函數(shù)
isFunction函數(shù)體如下:
return !!fn && typeof fn != "string" && !fn.nodeName &&
fn.constructor != Array && /^[\s[]?function/.test( fn + "" );
!!fn強(qiáng)制返回boolean型,然后否定了它不是字符串,不是dom元素,不是數(shù)組,然后用一個(gè)正則進(jìn)行驗(yàn)證,為什么要加個(gè)"^[\s[]?"讓我很 困惑,因?yàn)檫@是一個(gè)全局函數(shù)所以才判斷這么多,實(shí)際上就這個(gè)邏輯關(guān)系,只用最后一個(gè)驗(yàn)證就行了,因?yàn)榍懊嬉呀?jīng)都有對(duì)應(yīng)的判斷了,不過(guò)這個(gè)方法還是相當(dāng)具有 價(jià)值的,多多品味
jQuery( document )返回是一個(gè)骨子里是document的jquery對(duì)象
[ jQuery.fn.ready ? "ready" : "load" ]如果jQuery.fn存在ready屬性,返回[ready]否則返回[load],這種寫(xiě)法很值得借鑒,簡(jiǎn)潔高效
posted on 2011-09-05 10:04
墻頭草 閱讀(2556)
評(píng)論(0) 編輯 收藏