1

次のコードを見ると、(insideのように)theme[sprite].img内部にネストされているだけでなく、?の独自の要素になっていますか?result[definition].datatheme[sprite].imgtheme[sprite].imgresult[definition]

result[definition].data = theme[sprite];
result[definition].img = theme[sprite].img;

その場合、削除された場合はどうなりますか?それもresult[definition].data.img削除されますか?result[definition].imgtheme[sprite].img

ありがとう。

4

3 に答える 3

5

を削除するresult[definition].data.imgと、theme[sprite].imgも削除されます。これは、result[definiton].datatheme[sprite]がまったく同じ単一のオブジェクトであるためです。別のオブジェクトからのコピーをプロパティに持つ別個のオブジェクトであるresult[definition].imgため、その値を保持します。result[definition].img.img

ただし、これはネストとはまったく関係ありません。同じオブジェクトを参照するだけです。

于 2012-05-20T14:45:04.803 に答える
3

削除された場合result[definition].data.img、それも削除されresult[definition].imgますか...

いいえ。オブジェクトは参照型です。からの削除は監視されますがtheme[sprite] 、からは監視されませresult[definition]

theme[sprite]とは同じオブジェクトへの参照であるためresult[definition].data、そのオブジェクトに加えられた変更は、そのオブジェクトへの参照から観察できます。

ただし、result[definition].imgは他のオブジェクトによって参照されている別のオブジェクトへの参照であるため、完全に一意の参照であり、他のオブジェクトで発生することの影響を受けません。



       + ----------- + + ----------- +
       | | スプライト| |
 テーマ| | --------> | |\     v---この参照を削除しています...
       | | | | \
       + ----------- + + ----------- + \   img    + ----------- +
                                   ^ \ | |
                                  / \ ----> | |
                                 / | |
                                / + ----------- +
                   定義/^
                              //
       + ----------- + //
       | | //
結果| | ------- /                  img        /
       | | ---------------------------------- /
       + ----------- +
        ...これには影響しません-----------^
           およびその逆

プロパティの1つを削除しても、もう1つimgはそのまま残ります。

于 2012-05-20T14:52:12.407 に答える
1

オレグとクリフからの答えは正しいです。ただし、視覚化の目的で、これらのオブジェクトが実際にどのような形になっているのかを確認すると便利な場合があると思いました。

var definition = "Foo",
    sprite     = "Bar",

    result = {},
    theme  = {}
;

result[ definition ] = {}
// => result == { Foo : {} }

theme[ sprite ] = { img : "BAZ" }
// => theme == { Bar : { img : "BAZ" } }

result[ definition ].data = theme[ sprite ];
// => result == { Foo : {
//                  data : { img : "BAZ" }
//                }
//              }

result[ definition ].img  = theme[ sprite ].img;
// => result == { Foo : {
//                  data : { img : "BAZ" },
//                  img  : "BAZ"
//                }
//              }

delete result[ definition ].data.img;

console.log( result.[ definition ].data.img );
// => undefined


console.log( theme[ sprite ].img );
// => undefined

console.log( result[ definition ].img
// => "BAZ"
于 2012-05-20T15:07:55.707 に答える