2012-02-23 58 views
0

我有以下几点:获取物体属性?

var skillet = { 

    age: '20', 

    names: { 

     first: 'abe', 
     last: 'watson', 
     additional: "<div>'" + age + "'</div>" 

    } 

}; 

我被陷在age,它说,它的undefined?我也尝试names属性中的skillet.age,该属性不起作用。我如何在names内包含age

+0

?这工作'alert(skillet.age);' – 2012-02-23 13:08:41

+0

@MikeL .:在'additional'属性初始值设定项中使用'age'就是问题所在。 – 2012-02-23 13:15:37

回答

2

age你指的是你的names目的是自由变量,是不是在范围内的参考。在对象字面上,没有办法直接引用另一个对象字面的属性。你必须这样做:

var skillet = { 

    age: '20', 

    names: { 

     first: 'abe', 
     last: 'watson' 
    } 

}; 
skillet.names.additional = "<div>'" + skillet.age + "'</div>"; 
+0

为什么你不能使用'this'?因为'age:'已经被定义了? – Andy 2012-02-23 13:11:05

+0

@Andy:'this'指的是包含范围内引用的任何'this'。在对象字面上它没有被设置为'skillet'。没有符号可以从文字内引用'skillet'。属性初始值设定项的右侧是在创建“skillet”时执行的。你可能在考虑'this'与在你赋给'skillet'属性的* function *中使用它有关,但是当这个函数被*调用时,这是一个完全不同的事情。 – 2012-02-23 13:12:14

+0

ah crapola - 好吧,我需要你写的东西吗?我曾希望做一些像'skillet.global = {loadingUrl:'url',ajax:'

'" + loadingUrl + "'
'}'但它似乎我不能?而是必须使用'skillet.global = {loadingUrl:'url'} skillet.global .ajax =“
'" + loadingUrl + "'
”;'? – Andy 2012-02-23 13:15:57

1

当您到达additional时,skillet对象尚未定义。你有创造skillet后定义属性

var skillet = {  
    age: '20', 
    names: { 
     first: 'abe', 
     last: 'watson' 
     //additional: "<div>'" + age + "'</div>" 
    } 
}; 
skillet.names.additional = '<div>' + skillet.age + '</div>';