文章出處

讀之前的預備工作:

1.基礎的js知識,以及html和css知識,和正則表達式知識。可以參考妙味課堂的基礎js,html和css大綱。

2.JavaScript核心指南的知識http://www.cnblogs.com/cnwebdeveloper/archive/2012/03/28/2421461.html

3.JavaScript設計模式的知識http://www.oschina.net/translate/learning-javascript-design-patterns?lang=chs

4.使用過jQuery

 

 

有了預備工作,閱讀源碼你會比較順利。

我閱讀的是2.0.3無法壓縮版本,源代碼有注釋。

代碼先從整體開始閱讀,

1.搞清楚的就是它的封裝方式和繼承方式,

var $ =jQuery = function(){
    return new jQuery.fn.init();
}
jQuery.fn = jQuery.prototype = {
    init : function(){
        this.length = 0;
        this.test = function(){
            return this.length;
        }
        return this;
    },
    jquery: "2.0.3",
    length: 1,
    size: function() {
        return this.length;
    }
}
jQuery.fn.init.prototype = jQuery.fn;     //使用jQuery的原型對象覆蓋init的原型對象
alert( $().jquery );     //返回"2.0.3"
alert( $().test() );     //返回0
alert( $().size() );     //返回0

jQuery有其自身的靜態方法和動態添加方法。所謂靜態方法,就是jQuery各個模塊都會調用到的公共方法。所謂動態添加方法,就是通過jQuery自己實現的extend函數來擴展的方法,這些方法一般jQuery內部不會使用到。

2.列出它的各個模塊

Sizzle選擇器,DOM操作,事件操作,樣式操作,ajax操作,元素運動操作,回調函數隊列操作(一次性調用多個函數,或設定某個函數只能調用一次),延遲函數操作(原先ajax回調函數形式是樹狀,現在是線狀$.ajax("test.html").done(function(){ alert("哈哈,成功了!"); }).fail(function(){ alert("出錯啦!"); });),數據緩存操作

3.一行一行閱讀源代碼

實際閱讀過程中,你會遇到的困難大都是,

  1. 這個正則表達式什么意思
  2. 這么多if else嵌套究竟想表達什么個意思,而且為什么這么寫
  3. js語言特有的語法所表達的意思,比如雙感嘆號!!在js里的作用,對null與undefined用!操作符時都會產生true的結果,所以用兩個感嘆號的作用就在于,如果明確設置了(非null/undefined/0""/等值),自然一樣的值;如果沒有設置,test就會默認為false,而不是null或undefined或0。還有>>>和~這些操作符,在js里都是特殊用法。

針對這些困難,你能做的就是

  1. 看注釋
  2. 自己寫個小Demo,設源碼斷點,一步步調試來觀察代碼流程。(對于源碼里的各種情況判斷,這里要考驗你的Demo完整性,間接考研你的思維縝密性)
  3. 看第三方人怎么解讀源代碼,比如http://www.cnblogs.com/aaronjs/p/3279314.html

 

 

最后,發現,讀這個源代碼,不需要你知道什么算法知識,甚至數據結構也可以不知道,設計模式其實也可以不去知道。

耐下心來,靜下心來,有著一般的邏輯,就能看懂jQuery源碼。

平凡的邏輯,也能讀懂不平凡的jQuery庫。 

 

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()