jQuery 原始碼剖析 4 init 函式分析

2021-05-22 08:16:19 字數 2951 閱讀 2391

47

// handle html strings 48

if ( typeof selector === "string" )

7475

// handle: $(expr, [context]) 76

// (which is just equivalent to: $(content).find(expr)

77} else 78

return jquery( context ).find( selector );

7980

// handle: $(function) 81

// shortcut for document ready

82} else

if ( jquery.isfunction( selector ) )

第48

行通過typeof

判斷引數是否為乙個字串,字串又有三種可能。

在第50

行通過正規表示式來判斷字串是否為乙個

id 或者乙個

html

的串。match

儲存匹配的結果。

第53

行判斷是否為

html

串,通過判斷是否滿足正規表示式的第乙個分組來判斷,是通過

jquery.clean

進行處理。返回結果儲存在

selector

中。否則的話,說明滿足了第三個分組,字串是乙個

id,從

61 行開始,進行

id 的處理,首先使用標準的

document.getelementbyid

通過id

來獲取物件的引用。但是,這個方法在

ie 和

opera

下有乙個問題,瀏覽器在沒有找到指定

id 的物件的時候,會再次尋找

name

屬性為這個

id 的物件,如果有的話,會返回

name

屬性為id

的物件,這樣就不一定是我們希望的結果了。在第

65 行進行判斷,如果找到的物件不是我們期望的物件,那麼重新使用

find

進行處理。

如果id

沒有問題,那麼將結果建立成乙個

jquery

物件,69

行說明如果沒有找到物件就使用乙個陣列物件來表示。再次使用

jquery()

函式,這次呼叫函式的引數就是乙個物件的引用,如果找到了,那麼這個引數就是找到的物件,如果沒有找到,引數就使乙個陣列物件。

如果找到了,那麼這個物件就一定有

nodetype

屬性,在上邊的分析中

(41-46

行)可以看到,

jquery

函式將返回乙個

jquery

物件,這個物件屬性為

0 的成員值就是找到的物件,還有乙個

length

的成員為

1, 另外有乙個

context

的成員同樣指向這個找到的物件。

如果沒有找到物件,那麼傳遞乙個陣列物件,這個物件的

length

屬性將為0。

對於陣列的處理將在下面看到。

第69

行中ret

將表示這個

jqeury

物件,然後,設定

context

屬性為當前的文件物件

document

,selector

為當前結果的選擇器。最後在第

72 行返回這個物件。

第77

行的else

用來處理字串的第三種可能,它對應

53 行的用來判斷

selector

是否為id

或者html

串的if

語句,也就是說不是

html

串,也不是

id的字串,那麼,只有一種可能,就是這是乙個

css

的選擇串。那麼通過第

78 行進行處理,直接返回。

82} else

if ( jquery.isfunction( selector ) )

83return jquery( document ).ready( selector );

第82

和83

行處理第三種可能:函式。

如果引數為乙個函式,那麼,首先通過

jquery( document )

獲取乙個表示

document

的jquery

物件,然後將函式設定這個物件的

ready

事件處理。

8485

// make sure that old selector state is passed along 86

if ( selector.selector && selector.context )

9091

return

this.setarray(jquery.isarray( selector ) ?

92selector :

93jquery.makearray(selector));

94},

86 行的

selector

為第57

行所獲得的通過

html

串得到的物件。如果這個物件有

selector

屬性和context

屬性,那麼複製到當前的物件上來。

91 行判斷這個

selector

物件是否為陣列物件,如果是,將這個物件上的陣列成員複製到當前物件上來,如果不是的話,首先通過

93 行的

makearray

建立成陣列物件。然後再複製到當前物件上來。

shiro學習筆記 4 ini 配置

shiro是從根物件securitymanager進行身份驗證和授權的 也就是所有操作都是自它開始的,這個物件是執行緒安全且真個應用只需要乙個即可,因此shiro提供了securityutils讓我們繫結它為全域性的,方便後續操作。因為shiro的類都是pojo的,因此都很容易放到任何ioc容器管理...

原始碼剖析 Hashtable 原始碼剖析

hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...

python原始碼剖析 Python原始碼剖析

第頁共 頁python 原始碼剖析 物件機制 1.物件 在python 的世界中,一切都是物件,乙個整數是乙個物件,乙個字串也是 乙個物件,更為奇妙的是,型別也是乙個物件,整數型別是乙個物件,字串類 型也是乙個物件。從 年guido 在那個聖誕節揭開 python 世界的大幕開始,一直到現在,pyt...