0

我在正确获取我的 JS 代码结构时遇到问题。我基本上是在尝试创建一个包含其他对象的复杂对象。

我所追求的基本上是这样的:

object {
    f1: (),
    f2: (),
    objA: {
        objA: {
            v1: ""
        }
    },
    objB: {
        objA: {
            v1: "",
            v2: "",
            f1: ()
        }
    }
}

或类似的东西。我有一些工作,但在对象中,我希望能够引用对象的其他部分。

因此,例如,对于上面的示例,我想将变量设置object.objA.objB.v1为等于object.objA.objA.v1

当我尝试这个时,我收到一个错误,说它无法访问objA未定义的。

我怎样才能解决这个问题或对其进行重组以使其正常工作?

4

3 回答 3

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); 

jsFiddle

于 2013-01-29T23:01:47.910 回答
0

对象文字不是自引用的。您不能引用尚未定义的内容。这就是您收到错误的原因。

您可以做的是在最初定义结构后推迟定义自引用属性。

所以最初定义你的对象:

var obj = {
    a: {
        prop1: 1
    },
    b: 2,
    innerObj: {}
};

然后:

obj.innerObj.a = obj.a;

请记住,这不适用于数字等原始类型。这适用于具有引用的对象,例如函数和其他对象/数组。

于 2013-01-29T22:59:43.580 回答
0

不幸的是,在 Javascript 中定义对象字面量时,您不能将对象的其他部分引用到自身。所以:

object.objA.objB.v1: object.objA.objA.v1是不合法的。它还没有引用,object因为它还没有完成定义。

您可以做的是定义对象,然后在其上设置特定值。它们不会自动更新,除非它们也是对象并因此通过引用传递。

一个可能的解决方案是,它object.objA.objB.v1可以是一个返回 的值的函数object.objA.ovjaA.v1

于 2013-01-29T23:00:29.240 回答