0

我正在编写一个包含在自执行函数中的 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 源代码——并解释了为什么会发生这个问题。请看下面我的回答。

4

2 回答 2

0

出了点问题,因为我得到了正确的输出

于 2011-04-23T06:18:22.087 回答
0

哇,我觉得自己很傻。

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

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

于 2011-04-23T07:20:40.533 回答