1. 程式人生 > >深入了解jQuery之整體架構

深入了解jQuery之整體架構

後來 nbsp 靜態 得到 bsp 思路 函數 lis this

本文是在閱讀了Aaron艾倫的jQuery源碼解析(地址:http://www.imooc.com/learn/172)後的個人體會以及筆記。在這裏感謝艾倫老師深入淺出的講解!!

先來看看如何生成一個jQuery對象,源碼:

var  jQuery = function( selector, context ) {
        
        return new jQuery.fn.init( selector, context );
    };

當我們使用jQuery(‘something‘)或者$(‘something‘)時,我們得到的是一個 jQuery.fn.init()對象。那麽jQuery.fn是什麽鬼?

技術分享
jQuery.fn = jQuery.prototype = {
    // jQuery版本
    jquery: version,
    constructor: jQuery, // 構造函數
    // Start with an empty selector
    selector: "",
    // The default length of a jQuery object is 0
    length: 0,
    // 省略.....
}
技術分享

jQuery.fn 實際上是jQuery構造函數的原型對象的引用!! 所以我們以後看到 jQuery.fn時,把他當成jQuery構造函數的原型對象就可以了。

知道了jQuery.fn , 接下來看看jQuery.fn.init()函數

jQuery.fn.init = function( selector, context ) {
      //  省略....
return this; };
jQuery.fn.init.prototype = jQuery.prototype; // 註意這裏! 這句代碼讓init對象可以使用jQuery的原型方法。

這樣,我們在創建jQuery對象時就不用使用new關鍵字了。

整體看一下源碼架構:

技術分享
var $ = jQuery = function(selector,context){
    return new jQuery.fn.init(selector,context)  // 返回一個jQuery.fn.init()對象
}

jQuery.fn = jQuery.prototype = {
    constructor:jQuery,
    init:function(){
        // 省略.....
        return  this;
    }
}
jQuery.fn.init.prototype = jQuery.fn
技術分享

直觀的感受一下相互之間的關系:

技術分享

調用jQuery函數,我們得到的是一個jQuery.fn.init實例,這個實例的原型對象被重新指向到了jQuery函數的原型對象,所以這個實例可以使用jQuery原型對象的屬性和方法,而如果我們給jQuery函數附加方法,那麽這個方法就變成了靜態方法

然後來看一下jQuery.fn.init函數的源碼:

技術分享 View Code

配張思路圖:

技術分享

深入了解jQuery之整體架構