我想知道其中任何一个是否依赖于未定义的行为,和/或是否可以对其进行调整以便它们不会:
示例1 :
var str = {
ver: '1.01',
verdesc: 'WIP',
composite: {
version_block: str.ver + str.verdesc
}
}
示例2 :
var str = {
ver: '1.01',
verdesc: 'WIP',
},
composite: {
version_block: str.ver + str.verdesc
};
答案 0 :(得分:2)
您正在尝试从对象文字本身引用通过对象文字定义的属性。这是不可能的。在评估整个对象文字之后,属性仅分配给str
变量。因此,在对象文字中,您不能引用str
的属性。
因此,当您将对象文字分配给变量时,
var obj = { ... };
然后,在该对象文字中,您不能完全使用obj
引用。在评估对象文字时,obj
仍然是undefined
,并且只有在对象文字后的已经完全解析和评估,相应的对象创建了em> value,并将其分配给obj
。
var obj = {
a: 123,
b: obj.a // this will throw, "obj" is undefined
};
obj.b = obj.a; // this works
答案 1 :(得分:1)
http://jsfiddle.net/kendfrey/XwVFt/
错误信息解释了这一切。
你做不到。在分配变量之前,无法访问变量的属性,在创建整个对象之后发生。
您可以通过分配对象来解决此问题,然后然后设置其属性。
var str = { };
str.ver = '1.01';
str.verdesc = 'WIP';
str.composite = {
version_block: str.ver + str.verdesc
}