Jquery源碼分析-整體結構


  最近在學習Jquery的最新的源碼,Jquery-3.3.1版本。網上有很多對jquery解析的文章。但是我還是要自己去嘗試着看一篇jquery的源碼。本系列博客用來記錄其中的過程,並同大家分享。本次學習Jquery源碼是結合Jquery API來學習的。結合API來學習,首先會讓我理解Jquery的整體結構,讓我覺得Jquery源碼是有跡可循。如果盲目的去看Jquery源碼,10000多行的代碼可能會讓人望而生畏。

  Jquery API 很好地表達了Jquery的整體結構,可以很清楚知道Jquery由哪幾部分組成。Jquery主要由核心方法、選擇器、Ajax、屬性、CSS、文檔處理、篩選、事件、效果、工具、事件對象、延遲對象和回調函數等組成。下面是Jquery的整體框架圖。

  從上圖,我們能直觀明了的Jquery結構。我們先看Jquery的聲明方法。

閉包函數

  Jquery的所有對象都封裝在閉包上。閉包的好處,我以前寫關相關的博客。閉包的一大特點是,所有聲明的變量、方法都是在函數內部使用,與全局變量沒有沖突。

(function(global,factory){
				
			})(window,function(){
				
			});

  Jquery所有的實現都是被封裝在一個立即執行的匿名函數里。這個函數有兩個參數一個參數是window對象,另一個參數就是一個函數,用來聲明jquery的方法以及屬性,這個函數是主體。

(function(global,factory){
	if(typeof module ==="object" && typeof module.exports==="object"){
		module.exports = global.document ?
			factory( global, true ) :
			function( w ) {
				if ( !w.document ) {
					throw new Error( "jQuery requires a window with a document" );
				}
				return factory( w );
			};
	}
	else{
		factory(g);
	}
})(this,function(g,t){
	
});

  上面的代碼,主要是用來進行模塊化處理,讓jquery可以適用在CommonJS規范下的代碼。

Jquery使用

  在使用Jquery的時候,可以通過JQuery或者$直接調用Jquery提供的方法,並不需要去實例化Jq對象。Jquery是個立即執行的閉包函數,它把Jquery和$暴露出來給使用。

 window.jQuery = window.$ = jQuery; 通過這樣的方法,將Jquery對象賦值給window對象,window對象是個全局對象。對於面向對象語言,我們在使用類的時候,很多時候都通過new關鍵字來實例化類的對象。JavaScript中沒有類的概念,但是在JavaScript中也可以通過函數來創建對象。Jquery並不需要new關鍵字來實例化。

jQuery = function( selector, context ) {

        // The jQuery object is actually just the init constructor 'enhanced'
        // Need init if jQuery is called (just allow error to be thrown if not included)
        return new jQuery.fn.init( selector, context );
    },

  Jquery是通過這樣來聲明的,也就是說Jquery已經是一個實例化的對象了,所以我們可以直接使用Jquery對象。我們來看Jquery.fn.init函數時怎么聲明的。Jquery聲明的完整代碼如下。

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

  首先聲明了Jquery函數,同時為Jquery聲明了原型對象。

  

$(function(){
                $(".jqTest").text("Jquery");
            var obj=$.extend(true, {"second":"Jquery"}, {first:"Hello"});
            var j=obj.first+obj.second;
            console.log(j);
            })

  上面的代碼簡單的介紹了jquery的使用。$.extend,是jquery直接提供的靜態方法,$()方式調用的是Jquery.fn中的方法。兩種不同調用Jquery的方式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM