为什么全局jQuery对象在页面加载后被覆盖?

时间:2011-04-23 06:11:09

标签: javascript jquery document-ready

我正在编写一个包含在自执行函数中的jQuery扩展:

(function($) {
    // global variables for the purposes of this test
    __$ = $;
    __$support = $.support;

    $.support.abc = "123";

    // Setup for my extension goes here.

})(jQuery);

在我的测试页面上,我有

<script type="text/javascript" src="jquery-1.5.2.js"></script>
<script type="text/javascript" src="myplugin.js"></script>
<script type="text/javascript">
    $(function() {
        console.log(__$ === $); // false
        console.log(__$support === $.support); // false
        console.log($.support.abc); // undefined
    });
</script>

为什么会这样?我没有可能覆盖jQuery对象的其他脚本或jQuery插件。

我无法在文档准备好后找到jQuery源代码中的代码覆盖jQuery对象。有什么想法吗?

如果无法避免这种情况,那么在文档准备好后仍然可以访问的jQuery.support对象上定义新属性的正确程序是什么?

编辑:我省略了我的测试代码的一个关键部分,无意中重新评估了jQuery源代码 - 并解释了为什么会出现这个问题。请参阅下面的答案。

2 个答案:

答案 0 :(得分:0)

出了点问题因为我得到了correct output

答案 1 :(得分:0)

哇,我觉得自己很蠢。

我的测试代码(我未在问题中发布的部分)故意在jQuery.ajax()上调用jquery-1.5.2.js(因为这是一个用于测试进度事件的相当大的文件)。但是,我忘记了,除非手动将dataType选项设置为script以外的其他选项,否则jQuery将评估jQuery.ajax()检索到的任何JavaScript。

因此jQuery正在评估自己的源代码的新副本,因此window.jQuery被覆盖。