我遇到了解决我的JS代码结构问题的问题。我基本上是在尝试创建一个包含其他对象的复杂对象。
我所追求的基本上是:
object {
f1: (),
f2: (),
objA: {
objA: {
v1: ""
}
},
objB: {
objA: {
v1: "",
v2: "",
f1: ()
}
}
}
或类似的东西。我有一些工作,但在对象中,我希望能够引用对象的其他部分。
例如,通过上面的示例,我想将变量object.objA.objB.v1
设置为等于object.objA.objA.v1
的值
当我尝试这个时,我遇到一个错误,说它无法访问未定义的objA
。
如何解决这个问题或对其进行重组以使其有效?
答案 0 :(得分:1)
您的示例会抛出错误,因为它无效。简单地object.objA.objB.v1
不存在。但是如果你想使用存在的对象的属性,你可以简单地通过:
var yourObj = {
objA: {
objA: {
v1: "a"
}
},
objB: {
objA: {
v1: "b",
v2: "c",
}
}
}
yourObj.objB.objA.v1 = yourObj.objA.objA.v1;
alert(yourObj.objB.objA.v1);
答案 1 :(得分:0)
对象文字不是自我指涉的。您无法引用尚未定义的内容。这就是你收到错误的原因。
您可以做的是在最初定义结构后推迟自引用属性的定义。
所以最初定义你的对象:
var obj = {
a: {
prop1: 1
},
b: 2,
innerObj: {}
};
然后:
obj.innerObj.a = obj.a;
请记住,这不适用于数字等原始类型。这适用于具有引用的对象,如函数和其他对象/数组。
答案 2 :(得分:0)
不幸的是,在Javascript中定义对象文字时,您无法将对象的其他部分引用到自身。所以:
object.objA.objB.v1: object.objA.objA.v1
不合法。它尚未引用object
,因为它尚未完成定义。
您可以做的是定义对象,然后在其上设置特定值。它们不会自动更新,除非它们也是对象,因此通过引用传递。
一种可能的解决方案是object.objA.objB.v1
可以是一个返回object.objA.ovjaA.v1
值的函数。