咀嚼jQuery.noConflict()

這是我《咀嚼jQuery源碼》系列文章的其中一篇,詳細介紹請看這裏 jquery

簡要介紹

讓出jQuery對「$」變量的控制權,當可選布爾參數值爲true時,連同變量「jQuery」的控制權也讓出。詳細API請參考官網jQuery.noConflict()git

代碼解析

關於jquery.noconflict方法的代碼有兩段,一段天然是noconflict的方法體,另外一段在jquery代碼的頭部,jquery定義一系列局部變量以供自身使用的地方。在其中咱們能夠看到這兩個變量的聲明和定義,「_jquery」變量保存以前「window.jQuery」變量的值,「_$」則保存「window.$」,不管這些全局變量以前的內容是什麼,都做爲備份保存起來,防止被覆蓋,以便後面調用noconflict的時候能夠恢復。 github

// Map over jQuery in case of overwrite
_jQuery = window.jQuery,

// Map over the $ in case of overwrite
_$ = window.$,

瞭解了jquery初始化變量時作的這些工做,那麼關於noconflict方法所作的事情應該也就能猜到一二了。沒錯,它所作的事情就是將當前的「$」變量內容還原爲原先存儲的「_$」的內容。固然,這得是在確認當前「$」變量確實是指向jQuery對象的時候。假如當前「$」變量的控制權並不在jQuery手上(即「$」變量並不指向jQuery時),則不會將「$」變量還原。爲何呢?由於jQuery認爲,當「$」變量的控制權不在本身手上的時候,強制還原其值只會引發多個「$」使用者之間的混亂。 api

另外,假若有傳入真值參數的話,那麼也對「jQuery」變量進行判斷和讓出操做,其過程與「$」變量的讓出過程一致,不贅述。 函數

最後,返回jQuery變量。這裏的jQuery變量是jQuery匿名函數中的局部變量,其存儲的值確定爲jQuery對象自身。當noconflict方法被傳入真值對象調用的時候,這裏的返回值將成爲當前jQuery庫的jQuery對象的惟一引用(假如以前沒有備份jQuery引用的話)。所以通常會將這個返回值用另外一個變量保管以做後用,除非是之後不再使用jQuery相關變量。 spa

noConflict: function( deep ) {
    if ( window.$ === jQuery ) {
        window.$ = _$;
    }

    if ( deep && window.jQuery === jQuery ) {
        window.jQuery = _jQuery;
    }

    return jQuery;
}
相關文章
相關標籤/搜索