jQuery Overall structure

jQuery整體架構(gòu)

<script type="text/javascript">
;(function(global, factory) {
    factory(global);
}(typeof window !== "undefined" ? window : this, function(window, noGlobal) {
    var jQuery = function( selector, context ) {
        return new jQuery.fn.init( selector, context );
    };
    jQuery.fn = jQuery.prototype = {};
    // 核心方法
    // 回調(diào)系統(tǒng)
    // 異步隊(duì)列
    // 數(shù)據(jù)緩存
    // 隊(duì)列操作
    // 選擇器引
    // 屬性操作
    // 節(jié)點(diǎn)遍歷
    // 文檔處理
    // 樣式操作
    // 屬性操作
    // 事件體系
    // AJAX交互
    // 動(dòng)畫(huà)引擎
    return jQuery;
}));


jQuery.each( [ "get", "post" ], function( i, method ) {
    jQuery[ method ] = function( url, data, callback, type ) {
        // Shift arguments if data argument was omitted
        if ( jQuery.isFunction( data ) ) {
            type     = type || callback;
            callback = data;
            data     = undefined;
        }
        return jQuery.ajax({
            url: url,
            type: method,
            dataType: type,
            data: data,
            success: callback
        });
    };
});

</script>

jQuery的立即調(diào)用函數(shù)表達(dá)式的寫(xiě)法有三種:

寫(xiě)法1:

(function(window, factory) {
    factory(window)
}(this, function() {
    return function() {
       //jQuery的調(diào)用
    }
}))

可以看出上面的代碼中嵌套了2個(gè)函數(shù),而且把一個(gè)函數(shù)作為參數(shù)傳遞到另一個(gè)函數(shù)中并且執(zhí)行,這種方法有點(diǎn)復(fù)雜,我們簡(jiǎn)化一下寫(xiě)法:
寫(xiě)法2:

var factory = function(){
    return function(){
        //執(zhí)行方法
    }
}
var jQuery = factory();

上面的代碼效果和方法1是等同的,但是這個(gè)factory有點(diǎn)變成了簡(jiǎn)單的工廠方法模式,需要自己調(diào)用,不像是一個(gè)單例
的jQuery類,所以我們需要改成“自執(zhí)行”,而不是另外調(diào)用。
寫(xiě)法3:

(function(window, undefined) {
    var jQuery = function() {}
    // ...
    window.jQuery = window.$ = jQuery;
})(window);

從上面的代碼可看出,自動(dòng)初始化這個(gè)函數(shù),讓其只構(gòu)建一次。詳細(xì)說(shuō)一下這種寫(xiě)法的優(yōu)勢(shì):

  1. window和undefined都是為了減少變量查找所經(jīng)過(guò)的scope作用域。當(dāng)window通過(guò)傳遞給閉包內(nèi)部之后,在閉包內(nèi)部使用它的時(shí)候,可以把它當(dāng)成一個(gè)局部變量,顯然比原先在window scope下查找的時(shí)候要快一些。
  2. **undefined也是同樣的道理,其實(shí)這個(gè)undefined并不是JavaScript數(shù)據(jù)類型的undefined,而是一個(gè)普普通通的變量名。只是因?yàn)闆](méi)給它傳遞值,它的值就是undefined,undefined并不是JavaScript的保留字。

jQuery的類數(shù)組對(duì)象結(jié)構(gòu)

jQuery的入口都是統(tǒng)一的$, 通過(guò)傳遞參數(shù)的不同,實(shí)現(xiàn)了9種方法的重載:

1. jQuery([selector,[context]])
2. jQuery(element)
3. jQuery(elementArray)
4. jQuery(object)
5. jQuery(jQuery object)
6. jQuery(html,[ownerDocument])
7. jQuery(html,[attributes])
8. jQuery()
9. jQuery(callback)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    前端進(jìn)階之旅閱讀 115,559評(píng)論 24 450
  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,679評(píng)論 0 4
  • 撒謊是人之本性,在大多數(shù)時(shí)間里我們甚至都不能對(duì)自己誠(chéng)實(shí) - 《羅生門》Lügen sind menschlich,...
    劉溪溪閱讀 400評(píng)論 0 0
  • 七歲的小磊終于如愿以償,見(jiàn)到了外星人。 自稱來(lái)自卡拉卡拉星的哈瓦?哈魯有禮貌地與小磊握手,并將自己橫穿銀河系的使命...
    羽信閱讀 454評(píng)論 2 0

友情鏈接更多精彩內(nèi)容