首先,看一下在 jQuery 中可以使用的四類構建對象的方式:
l $( expression, [ context ] ),串的內容是一個 CSS 選擇器,例如:$(“#msg”) 中的 msg 就是一個元素的 ID
l $( html ),一個 HTML 串,返回一個 DOMElement 元素對象
l $(函數),ready 事件的處理函數
l $( 對象的引用 ),返回一個經過處理之后的 jQuery 對象
分析 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 行為 || 運算的特殊使用,表示的含義為如果 selector 不為空,則返回 selector, 如果 selector 為空,則返回 document, 如果都不為空,返回 selector。
從第 41 行開始,處理第一種可能,判斷參數對象是否為一個 DOMElement 對象,由于 DOMElement 對象有nodeType 屬性,這樣就可以判斷參數是否為一個 DOM 元素了。
如果是的話,創建一個 jQuery 對象,this 表示通過 new 方式調用 init 函數所創建的對象,然后增加兩個用于處理的成員,第一個成員名稱為 0 ,值為參數對象,第二個成員的名稱為 length,值為 1,實現了一個仿數組對象的對象。最后,將這個 jQuery 對象返回。