我正在编写一个包含在自执行函数中的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源代码 - 并解释了为什么会出现这个问题。请参阅下面的答案。
答案 0 :(得分:0)
出了点问题因为我得到了correct output。
答案 1 :(得分:0)
我的测试代码(我未在问题中发布的部分)故意在jQuery.ajax()
上调用jquery-1.5.2.js
(因为这是一个用于测试进度事件的相当大的文件)。但是,我忘记了,除非手动将dataType
选项设置为script
以外的其他选项,否则jQuery将评估jQuery.ajax()
检索到的任何JavaScript。
因此jQuery正在评估自己的源代码的新副本,因此window.jQuery
被覆盖。