我的应用程序有类似以下结构
window.object1;
window.object2;
$(document).ready(function() {
window.object1 = new type1object();
});
function type1object() {
//lots of code
this.property = 'property';
window.object2 = new type2object();
}
function type2object() {
//lots of code
this.property = new type3object();
}
function type3object() {
//lots of code
console.log(window.object1);
this.property = window.object1.property;
}
问题在于,每当我尝试从文档就绪回调以外的任何地方访问window.object1时,它都会以未定义的形式返回,即使在我检查DOM窗口时也是如此..object1的定义与我预期的完全相同
我尝试过如上所述但是使用简单的全局变量(即var object1而不是window.object1)...尝试在各个地方声明object1和object2的初始虚拟值...但是反对一样的问题。
有谁知道为什么我无法全局访问我的全局变量?
答案 0 :(得分:2)
您必须确保在启动后评估window.object1。 也就是说,在你的情况下,只有在document.ready完成执行
之后如果您查看下面的示例,您可以看到在点击时都会初始化。
<html>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
<script>
$(document).ready(function() {
window.object1 = new type1object();
window.object2 = new type2object();
//console.log(window.object1);
});
$(document).click(function(){
console.log(window.object1);
console.log(window.object2);
});
function type1object() {
}
function type2object() {
}
</script>
答案 1 :(得分:1)
由于在文档就绪函数内部没有设置window.object1
的值,因此在运行之前您将无法访问它。
您的代码中没有任何内容表明您不能完全删除该文档就绪呼叫。它通常保留用于等待在dom中加载元素,这看起来不像你在做。如果您以某种方式做需要在不存在的代码内部等待的元素,只需将您的脚本放在页面底部,标记正上方。这相当于文件就绪。
答案 2 :(得分:1)
编写真正被删除的代码使答案失效 - 我在构造object1期间创建了引用object1的东西。
所以我把它改成了这个,所以在尝试引用它之前,对象存在(虽然没有内容):
window.object1;
window.object2;
$(document).ready(function() {
window.object1 = new type1object();
window.object1.construct();
});
function type1object() {
//lots of code
this.construct = function() {
this.property = 'property';
window.object2 = new type2object();
};
}
function type2object() {
//lots of code
this.property = new type3object();
}
function type3object() {
//lots of code
console.log(window.object1);
this.property = window.object1.property;
}