2013-03-25 41 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