jQuery1.0原始碼分析之建構函式完整注釋(五)

來源:互聯網
上載者:User

 

jQuery的函數設計都很緊湊,相互調用很多。例如,你要看明白a函數,發現a裡面調用b函數,b裡面又調用c函數。這樣一路跟下去,基本上就看暈了。

 

所以,我建議最好是一個函數一個函數的讀懂,不要深跟,等通篇都看完一遍,自然就都通了。

 

 

所以今天把jQuery的建構函式註解一下。

 

 

function jQuery(a,c) { 

 

    // 處理ready函數,$(function() { }) 

    if ( a && a.constructor == Function && jQuery.fn.ready ) 

        return jQuery(document).ready(a); 

 

    // 給a設一個預設值 

    a = a || jQuery.context || document; 

 

    // 如果a是jQuery對象,把a和空數組合并,然後返回,這樣做的目的是不破壞原來的jQuery對象。 

        //(註:jquery屬性是每個jQuery對象都有的,值為jQuery的版本) 

    if ( a.jquery ) 

        return $( jQuery.merge( a, [] ) ); 

 

    // 如果c是jQuery對象,調用find函數,去尋找 

    if ( c && c.jquery ) 

        return $( c ).find(a); 

     

    // 以上情況都不是,開始new jQuery對象 

    if ( window == this ) 

        return new jQuery(a,c); 

 

    // 如果a是html代碼,$('<div />'),把html代碼轉成Dom元素 

        // jQuery.clean就是把html代碼轉換成Dom元素數組 

        var m = /^[^<]*(<.+>)[^>]*$/.exec(a); 

    if ( m ) a = jQuery.clean( [ m[1] ] ); 

 

    // 如果a是數組或者類數組,並且裡面裝的都是dom元素,把a和空數組合并一下 

        // 如果是其他情況,就調用find函數,find函數是處理css運算式的 

        // 最後調用get方法,做出jQuery對象返回         

        this.get( a.constructor == Array || a.length && !a.nodeType && a[0] != undefined && a[0].nodeType ? 

        // Assume that it is an array of DOM Elements 

        jQuery.merge( a, [] ) : 

 

        // Find the matching elements and save them for later 

        jQuery.find( a, c ) ); 

 

        // 最後看一下最後一個參數是不是Function,是的話遍曆執行一下 

    var fn = arguments[ arguments.length - 1 ]; 

     

    if ( fn && fn.constructor == Function ) 

        this.each(fn); 

 

最後,從上面的建構函式代碼來看,jQuery建構函式主要支援一下幾種方式

 

 

1、$( Function ),ready函數

 

2、$( Element ) / $( [ Element] ),可以把Dom元素或者數組直接轉換成jQuery對象

3、$( CSS Expression, Content), 也可以用CSS運算式來選取Dom元素

 

4、$( Html ),html也可以轉換成jQuery對象

 

 


作者 baozhifei

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.