如何从嵌套对象文字访问外部成员?

在以下代码中,是否可以从嵌套对象文字中访问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.
}
    
已邀请:
在你说的方式 - 没有。 你需要两个阶段的构造,这将工作:
var outer = { x : 0 };
// outer is constructed at this point.
outer.inner = {
        b : outer.x + 1 // 'outer' is defined here.
};
    
不在你那里的构造中,没有。 主要原因是当你在
inner
内时,
outer
实际上并不存在。 如果你将
inner
的属性更改为函数,你可以在运行时访问
outer
,但这将是非常难看的代码。 考虑使用
new outer();
代替并以这种方式构建一个对象,然后你可以在
inner
里面使用
this
,但那时它是一个完全不同的构造,看起来像
var outer = function() {
    this.x = 0;
    this.inner = {
        a: this.x + 1
    };                    
};

var b = new outer();

console.log(b.inner.a); // 1
    
我不认为那种结构是有意义的。我不认为有任何阻止你说的话
var outer2;
outer2.inner = outer.inner;
在那种情况下,你如何区分这两个父母? 这样做的方法可能是更多的构造函数类型函数,其中一个参数可以根据需要分配给outer.x和inner.whatever。     
你也可以使用一个闭包:
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花园 http://bonsaiden.github.com/JavaScript-Garden/#closures     

要回复问题请先登录注册