DIV CSS 佈局教程網

jQuery架構剖析
編輯:JQuery特效代碼     

對於jQuery的整體架構,經典之處有三:

1、jQuery的無new構建

2、jQuery的鏈式調用

3、jQuery的插件接口

想必兄弟姐妹們也覺得這架構不錯哈,但有時又畏懼去拜讀大量的jQuery源碼,只好對它敬而遠之了。

哈哈,今天我就將其jQuery架構提煉出來,和大家一同分析研究下,jQuery是怎麼實現這三個經典之處的。

提煉的代碼如下:

 <!DOCTYPE html> 
     <head>
         <title>jQuery</title>
         <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     </head>
     <body>
         <script>
 
            (function(window){
                 var temp=window.$=function(){
                     return new temp.fn.init();
                 };
                 temp.fn=temp.prototype={
                         init:function(){
                             return this;
                         },
                         attr:function(){
                             console.log(1);
                             return this;
                         }
                 }
                 temp.fn.init.prototype = temp.fn;
             })(window);
             //執行
             console.log( $ );
             
         </script>
     </body>
 </html>

是不是吃驚,怎麼會這麼少,哈哈哈,不必吃驚,事實就是這樣,如果你能理解其中的用意,那麼jQuery的整體架構也就差不多了哦。

下面我們就來一步一步地探其究竟。

回想一下,當我們調用jQuery方法時,是怎麼調用的呢?

答案:$(‘xx’)

是通過$來調用的,完全沒有new一個對象好不好。

jQuery是怎麼做到的呢。通過$()方法,返回一個實例對象。詳情見上代碼中的第11行。

這樣它就不用new了撒。

咦,第15行是什麼?return this?

what?

聰明的你可能會說,那麼11行處,return的this不就應該指向temp.fn嗎?因為this指向調用者嘛。

是的,this是指向它的調用者。

但是請仔細看看它是通過的new創建的一個實例哦。

那麼this就是指向的temp.fn.init這個構造函數創建出來的實例啦。

可能,你會問,我靠,為什麼new一下就變了呢。哈哈,看來有必要了解一下new的過程哦。

下面簡單闡述下new都做了什麼:

1、創建一個新的對象,這個對象的類型是object;

2、將這個對象的_prototype_隱指針指向構造函數的prototype

3、執行構造函數,當this關鍵字被提及的時候,使用新創建的對象的屬性;

4、返回新創建的對象

所以return new temp.fn.init()就是返回的temp.fn.init創建的對象啦。

大家注意到22行沒,temp.fn.init.prototype = temp.fn,這一句其實就是將init的原型鏈指向jquery的原型鏈啦,這樣temp.fn.init創建出來的實例就可以訪問jquery.prototype裡面的東東咯。也就是為什麼我們能夠通過$.fn擴展實例方法了哈。

對於鏈式調用,其實就是在每個調用的方法中return this;嘛。就如上述代碼中的19行一樣咯。

好啦,兄弟姐妹們,這下jQuery的架構三大特性被我們一步一步窺探清楚了哦。

總結:

jQuery利用匿名函數創建無污染的命名空間,通過window對象,將$符號拋給用戶操作,利用原型鏈的知識構建面向對象。

晚安everyone~

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved