jQuery建構函式分析

2022-09-18 05:03:23 字數 1454 閱讀 9422

(function( window, undefined ) )( window );

我們通過alert(jquery) 知道它是乙個物件,那麼這個物件是怎麼構造出來的呢?我們使用$(document)類似的寫法獲取元素,就好像直接呼叫了普通的方法一樣,jquery就是普通的函式嗎?如果是建構函式為什麼不是 new $(document)的常見形式呢?

其實jquery是物件導向js庫,也有建構函式,每次呼叫jquery方法是就會例項化乙個jqeury物件,但是jquery的寫法卻非常高明。

首先先談談js物件導向:  js雖然不是物件導向的語言,卻又很多物件導向的寫法,這裡推薦大家看一下圖靈的《j**ascript高階程式設計》中的物件導向的程式設計部分。在眾多方法中比較常使用的寫法是構造加原型方式,下面舉例:

var person=function

(name,age)

person.prototype=,

say:

function

(msg)

};var tom=new person('tom',23);

tom.init('你好');//

tom說你好

其實jquery也是採用的這種方式只不過用了更聰明的寫法,一起再看看jquery的建構函式有什麼不同

//

define a local copy of jquery

var jquery = function

( selector, context ) ,

從原始碼中可以看到在jquery真正的函式是init方法,當我們呼叫jquery時會返回new init()的結果而不直接new jquery() .

jquery.fn是啥呢,在後面我們會看到這樣一句**

jquery.fn = jquery.prototype = {...

這樣就很好理解了,其實jquery.fn就是原型物件也就是說在jquery原型裡面有乙個init方法,這個方法是真正的建構函式。這樣寫的好處就是不需要在寫$().init()這樣的操作,直接就初始化了,但是還有乙個問題就是既然init才是建構函式那我們寫在jquery上面的那麼方法例項不是不能呼叫嗎?init的例項化自然只能呼叫init的方法啦,往後看到這樣一句**

//

give the init function the jquery prototype for later instantiation

jquery.fn.init.prototype = jquery.fn;

之前講過jquery.fn=jquery.protype,這就意味著jquery的原型物件賦給了init的原型,這樣jquery的原型方法自然init也就都有了,通過這樣構造方式s使得使用jquery方法非常簡單既不需要new jquery()的操作也不需要手動初始化就行呼叫普通函式一樣簡單。

jQuery建構函式init引數分析(一)

的建構函式,jquery 物件中有乙個原型方法 init 才是是真正的建構函式,通過 init 的原型物件跟 jquery 的原型物件保持引用關係使得 init 的例項可以正常呼叫 jquery 的原型方法,就好像是 jquery 的例項一樣。下面就來看看 init 這個幕後的建構函式是怎麼寫的 i...

建構函式與析構函式分析

include include using namespace std class b b class c c class a a c c b b int main 試驗 如上。輸出結果如下 c b a a b c 為什麼呼叫建構函式的時候先呼叫c,然後b,最後才呼叫a呢?而呼叫函式析構正好相反呢?...

乙個函式分析多繼承建構函式

類名 類名 形參表 比如 circle circle float r 類名 類名 形參表 內嵌物件1 形參表 內嵌物件2 形參表 比如 deriverd int a,int b,int c,int d base1 a member2 d member c base2 b include using ...