深入了解jQuery之整體架構
阿新 • • 發佈:2017-05-16
後來 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之整體架構