-3

我想知道其中任何一个是否依赖于未定义的行为,和/或是否可以对其进行调整以使其不:

示例 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
};
4

2 回答 2

2

您正在尝试从对象文字本身中引用通过对象文字定义的属性。这是不可能的。只有在评估整个对象字面量之后,才会将属性分配给str变量。因此,在对象字面量中,您不能引用.str

因此,当您将对象文字分配给变量时,

var obj = { ... };

然后,在该对象文字中,您根本无法使用该obj引用。在评估对象字面量时,obj仍然是undefined,并且只有对象字面量被完全解析和评估后,才会创建相应的Object值并将其分配给obj

var obj = {
    a: 123,
    b: obj.a // this will throw, "obj" is undefined
};
obj.b = obj.a; // this works
于 2012-08-08T01:46:13.057 回答
1

http://jsfiddle.net/kendfrey/XwVFt/

错误消息说明了一切。

你不能那样做。在分配变量之前,变量的属性是不可访问的,这发生创建整个对象之后。

您可以通过分配对象,然后设置其属性来解决此问题。

var str = { };
str.ver = '1.01';
str.verdesc = 'WIP';
str.composite = {
  version_block: str.ver + str.verdesc
}
于 2012-08-08T01:49:39.910 回答