我写包含在自执行功能的jQuery的扩展:为什么全局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源代码 - 并解释了为什么会发生这个问题。请参阅下面的答案。
你确定你的函数正在执行? – 2011-04-23 06:16:11
@Matt,是的。测试页面的其余部分起作用,并且插件中的所有内容(处理AJAX进展事件)都能正常工作。但是当我打开控制台并检查'$ .support.myproperty'时,它是未定义的,这很烦人,因为这意味着我的插件的用户无法利用该检查。 – kpozin 2011-04-23 06:17:48