Javascript结构
我的JS代码的结构有问题。我基本上是在尝试创建一个包含其他对象的复杂对象 我所追求的基本上是:Javascript结构,javascript,oop,Javascript,Oop,我的JS代码的结构有问题。我基本上是在尝试创建一个包含其他对象的复杂对象 我所追求的基本上是: object { f1: (), f2: (), objA: { objA: { v1: "" } }, objB: { objA: { v1: "", v2: "", f1: () } } }
object {
f1: (),
f2: (),
objA: {
objA: {
v1: ""
}
},
objB: {
objA: {
v1: "",
v2: "",
f1: ()
}
}
}
或者类似的东西。我有一些工作,但在对象中,我希望能够引用对象的其他部分
例如,在上面的例子中,我想将变量object.objA.objB.v1
设置为等于object.objA.objA.v1
当我尝试这一点时,我只是得到一个错误,说它无法访问未定义的objA
我怎样才能绕过这个问题,或者重新构造它使其工作?对象文字不是自引用的。您不能引用尚未定义的内容。这就是为什么会出现错误 您可以做的是在初始定义结构之后延迟自引用属性的定义 因此,首先定义对象:
var obj = {
a: {
prop1: 1
},
b: 2,
innerObj: {}
};
然后:
请记住,这不适用于数字等基本类型。这将适用于具有引用的对象,如函数和其他对象/数组。不幸的是,在Javascript中定义对象文字时,无法将对象的其他部分引用到自身。因此:
object.objA.objB.v1:object.objA.objA.v1
不合法。它还没有引用对象
,因为它的定义尚未完成
您可以做的是定义对象,然后在其上设置特定的值。但它们不会自动更新,除非它们也是对象,因此通过引用传递
一种可能的解决方案是,
object.objA.objB.v1
可以是一个返回object.objA.ovjaA.v1
值的函数。您的示例会抛出一个错误,因为它无效。简单地说,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);
在初始化对象之前,您无法访问对象的其他属性,直到最终}。到那时为止,对象确实是未定义的。我在这里为一个类似的问题写了一个答案:对于object literal来说这是正常的,您不能访问尚未定义的对象。是的,这很有意义。有什么好办法吗?我不想使用函数返回值,因为我希望数据在以后被重写。我只希望引用变量的代码在被调用时这样做?在这种情况下,您可以将对象创建为函数,这样您就有了一个构造函数。然后在该构造函数中,您可以设置您喜欢的所有变量,因为对象已经初始化。在您的代码中没有
object.objA.objB.v1
,您的意思可能是object.objB.objA.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);