0

JSコードの構造を正しく取得するのに問題があります。私は基本的に、他のオブジェクトを含む複雑なオブジェクトを作成しようとしています。

私が求めているのは基本的に次のようなものです:

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

またはこれに似たもの。なんらかの作業がありましたが、オブジェクト内で、オブジェクトの他の部分を参照できるようにしたいと思います。

たとえば、上記の例では、変数object.objA.objB.v1をからの値と等しくなるように設定したいと思います。object.objA.objA.v1

objAこれを試してみると、undefinedにアクセスできないというエラーが表示されました。

これを回避したり、機能させるために再構築したりするにはどうすればよいですか?

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 に答える