2013-03-25 42 views
4

我玩弄的jQuery的膽量只是爲了得到它是如何工作的感覺。我大部分都明白,但我對某件事很好奇。jQuery對象和窗口對象

在jQuery中,我們有這個實際創建jQuery對象(在線60):

jQuery = function(selector, context) { 
    // The jQuery object is actually just the init constructor 'enhanced' 
    return new jQuery.fn.init(selector, context, rootjQuery); 
}, 

init方法是漫長的,所以我就饒你複製和粘貼(如果你查看源想看看它,它在線123)。該方法通過jQuery.prototype提供。從本質上講,它着眼於參數並做出關於元素選擇的一些決定。

再往下腳本(在線19174),我們有這樣的:

// Expose jQuery to the global object 
window.jQuery = window.$ = jQuery; 

這是有趣的,因爲註釋掉這一行還是讓$在全局對象可用。

這是爲什麼需要?它好像在jQuery函數調用init方法創建了全球性的$兩種方式。我在Chrome,Firefox和Safari上測試了它們,它們都可以在沒有Expose jQuery to the global object行的情況下生存。

這是舊版本瀏覽器和向後兼容?

+1

你確定嗎?因爲,我評論了該行,當我提醒'$'時,它會引發錯誤。 http://jsfiddle.net/RBG7P/ – 2013-03-25 17:09:25

+0

你在瀏覽器本地試過嗎? – Sethen 2013-03-25 17:10:57

+0

我沒有選擇庫和jsfiddle,我應該如何在本地進行測試? – 2013-03-25 17:12:10

回答

2

jQuery庫是在封閉定義,該行是真正暴露圖書館到全球範圍。

alert($) 

我試着在評論撥弄http://jsfiddle.net/RBG7P/1/該行和它拋出了我的異常。當沒有評論,它的工作。

你確定你正在做正確的方式?

+0

是的。在我的機器上,即使我註釋掉該行,仍然會定義'$'。 – Sethen 2013-03-25 17:12:33

+0

Stack Overflow驗證強制我在提交此答案之前發佈代碼,因此提醒($)'。 – 2013-03-25 17:12:59

+0

@SethenMaleno在本地定義?你究竟在本地嘗試什麼?是否有可能在其他地方定義它。 – 2013-03-25 17:13:34