请查看以下代码:
var test = {
test2 : {
variable: 'hello world',
test3: {
test4 : test.test2.variable
},
echo : function() {
alert(test.test2.test3.test4);
}
}
};
test.test2.echo();
为什么test4不能访问变量:
test4 : test.test2.variable
请随意修改我的标题,我找不到更好的标题。
谢谢!
答案 0 :(得分:5)
test
在评估undefined
时为test.test2.variable
。
表达式由内而外评估,因此您的代码按以下顺序执行以下操作:
variable
属性附加到(2)test4
属性附加到(4),其值是评估test.test2.variable
的结果(此失败,因为直到(1)才分配测试)test3
属性附加到值为(4)echo
属性附加到(2)test2
属性附加到指向(2)test
。如果您可以依赖现代浏览器并且不太可能经常阅读,或者您可以在test
正确初始化后分配它,则可以使用下面的getter来延迟对(5)的评估。
var test = {
test2: {
variable: "foo",
test3: {
get test4 () { return test.test2.variable; }
}
}
};
或更向后兼容
var test = {
test2: {
variable: "foo",
test3: {
test4: null
}
}
}
test.test2.test3.test4 = test.test2.variable;
答案 1 :(得分:3)
因为test
尚未分配。 Javascript解释器首先解析右侧的JSON文字,然后将值赋给test
变量:
var test = {...}
要修复它,你可以这样做:
var test = {
test2 : {
variable: 'hello world',
test3: {
},
echo : function() {
alert(test.test2.test3.test4);
}
}
};
test.test3.test4 = test.test2.variable;
答案 2 :(得分:0)
这应该有效。 自从迈克塞缪尔给出了一个很好的解释以来,我没有解释过。
var test = {
test2 : {
variable: 'hello world',
test3: {
test4 : function (){return test.test2.variable }
},
echo : function() {
alert(test.test2.test3.test4());
}
}
};
test.test2.echo();