OOJavaScript和全局变量的奇怪行为
我有一个这样的全局对象数组OOJavaScript和全局变量的奇怪行为,javascript,oop,global,Javascript,Oop,Global,我有一个这样的全局对象数组 var data = {}; data.meta = [{..},{..},{..}]; 然后我定义了一个Javascript类,如下所示: var ui = {}; ui.Ruler = function(d) { this.d = d; this.o = null; }; ui.Ruler.prototype.render = function () { console.log('render'); return this.o;
var data = {};
data.meta = [{..},{..},{..}];
然后我定义了一个Javascript类,如下所示:
var ui = {};
ui.Ruler = function(d) {
this.d = d;
this.o = null;
};
ui.Ruler.prototype.render = function () {
console.log('render');
return this.o;
};
我可以从dev控制台访问data.meta
,它会显示它的内容。
然而,
当我初始化类的一个实例并将data.meta
的对象传递给它时
var ruler = new ui.Ruler(data.meta[0]);
控制台给我一个错误:
未捕获的TypeError:无法读取未定义的属性“0”
而且,data.meta
突然变得undefined
。这怎么可能?我做错了什么?我希望data.meta[0]
在实例化的ruler
对象中可用。如果我不运行这一行,data.meta
仍然被定义。有人能给我解释一下这里发生了什么事吗 看来一切都很好。
我试着在FF和Chrome中运行它-ok。
这是我的小提琴
(我不能评论)不要使用
var
来声明全局变量。要使变量显式全局化,请将其定义为window.data={}
,并将其称为window.data
。我似乎在复制该问题时遇到了问题。你能提供一把小提琴吗?阅读错误信息<代码>数据已定义,但它没有meta
属性。这意味着错误可能与您上面提供的代码无关(因为上面的代码正确地定义了data
上的meta
属性)是否被数据
覆盖?这太奇怪了。我无法在JSFIDLE中复制它。当我执行var-ruler=newui.ruler(data.meta)时
,即不选择对象,但传递整个数组,data.meta
仍被定义(在对象外部)。但是:ruler.d==未定义的
。然而,当我在运行完这段代码后,直接在控制台中执行var-ruler2=newui.Ruler(data.meta[0])
时,它工作了,ruler2.d==={…}
。好吧,真不好意思,我发现了-调用var-Ruler=new-Ruler…
,data.meta
尚未定义-它由一个异步请求填充,我忘记了等待答案执行var-ruler…
。尴尬。
var ruler = new ui.Ruler(data.meta[0]);