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