2013-03-08 98 views
1

我试图从当前值的父项访问一个值,但没有成功。我有这2样的JavaScript代码演示我的问题:声明对象时访问属性?


1)

var x = { 
    y : { 
     a : "a", 
     ab : this.a + "b" 
    } 
}; 

的console.log(xy格式);

> Object { 
    a : a, 
    ab : undefinedb 
} 

2)

var x = { 
    y : { 
     a : "a", 
     ab : x.y.a + "b" 
    } 
}; 

console.log(x.y); // Uncaught TypeError: Cannot read property 'y' of undefined 
+2

您不能从声明对象字面量内引用对象(概念上说,它*还不存在*)。它必须分两步完成,或者使用函数和延期评估。 – 2013-03-08 22:35:25

回答

1

x.ythis是不确定的在这一点上他们是undefined。我的意思是,当你创建一个匿名对象时,它不会真正存在,直到关闭}

所以另一种方式来实现你想要的是什么:

var x = { 
    y : {a : "a"} 
} 

x.y.ab = x.y.a + "b" 

这种方式后xy都被初始化,因此x.y.a现在设置的ab变量被设置。

如果你真的想在初始化期间设置x.y.ab,那么你需要更正式地使用函数和闭包。像下面这样。

var x = function(){ 
    this.a = 'foo'; 
    this.b = this.a + ' bar'; 
}() // Immediate function call so I don't have to create it. 

console.log(x.b); // logs 'foo bar' 
2

当使用文字,你不能,直到被执行定义这些变量的声明。

的一个好方法是:

var x = {}; 

x.a = 'hey'; 

x.b = x.a + ' how you doing?'; 

alert(x.b); 

或者更简洁:

var x = { 
    a: 'hey' 
}; 

x.b = x.a + ' how you doing?'; 

alert(x.b);