首先,看一下在 jQuery 中可以使用的四類構(gòu)建對(duì)象的方式:
l $( expression, [ context ] ),串的內(nèi)容是一個(gè) CSS 選擇器,例如:$(“#msg”) 中的 msg 就是一個(gè)元素的 ID
l $( html ),一個(gè) HTML 串,返回一個(gè) DOMElement 元素對(duì)象
l $(函數(shù)),ready 事件的處理函數(shù)
l $( 對(duì)象的引用 ),返回一個(gè)經(jīng)過處理之后的 jQuery 對(duì)象
分析 init
35 jQuery.fn = jQuery.prototype = {
36 init: function( selector, context ) {
37 // Make sure that a selection was provided
38 selector = selector || document;
39
40 // Handle $(DOMElement)
41 if ( selector.nodeType ) {
42 this[0] = selector;
43 this.length = 1;
44 this.context = selector;
45 return this;
46 }
第 38 行為 || 運(yùn)算的特殊使用,表示的含義為如果 selector 不為空,則返回 selector, 如果 selector 為空,則返回 document, 如果都不為空,返回 selector。
從第 41 行開始,處理第一種可能,判斷參數(shù)對(duì)象是否為一個(gè) DOMElement 對(duì)象,由于 DOMElement 對(duì)象有nodeType 屬性,這樣就可以判斷參數(shù)是否為一個(gè) DOM 元素了。
如果是的話,創(chuàng)建一個(gè) jQuery 對(duì)象,this 表示通過 new 方式調(diào)用 init 函數(shù)所創(chuàng)建的對(duì)象,然后增加兩個(gè)用于處理的成員,第一個(gè)成員名稱為 0 ,值為參數(shù)對(duì)象,第二個(gè)成員的名稱為 length,值為 1,實(shí)現(xiàn)了一個(gè)仿數(shù)組對(duì)象的對(duì)象。最后,將這個(gè) jQuery 對(duì)象返回。