在下面的代码中,是否可以从嵌套对象文字中访问x成员?
var outer = {
x : 0,
inner: {
a : x + 1, // 'x' is undefined.
b : outer.x + 1, // 'outer' is undefined.
c : this.x + 1 // This doesn't produce an error,
} // but outer.inner.c is NaN.
}
答案 0 :(得分:9)
你说的方式 - 没有。
你需要两个阶段的构建,这将有效:
var outer = { x : 0 };
// outer is constructed at this point.
outer.inner = {
b : outer.x + 1 // 'outer' is defined here.
};
答案 1 :(得分:4)
不在你那里的构造中,没有。
当您在outer
内时,inner
实际上并不存在的主要原因。
如果您将inner
的属性更改为可以在运行时访问outer
的函数,但这将是非常难看的代码。
考虑使用new outer();
代替并以此方式构建对象,然后您可以在this
内使用inner
,但那时这是一个完全不同的构造,看起来像
var outer = function() {
this.x = 0;
this.inner = {
a: this.x + 1
};
};
var b = new outer();
console.log(b.inner.a); // 1
答案 2 :(得分:0)
我不认为那种结构是有意义的。我认为没有什么可以阻止你说
var outer2;
outer2.inner = outer.inner;
在那种情况下,你如何区分两个父母?
这样做的方法可能是更多的构造函数类型函数,其参数可以根据需要分配给outer.x和inner.whatever。
答案 3 :(得分:0)
您也可以使用闭包:
var outer = function outer() {
var x = 0;
return {
inner : {
a: x + 1
}
}
};
var b = outer();
console.log('a is ' + b.inner.a);
//a is 1
有关封闭的精彩文章,请查看 javascript花园