0

私は2つのオブジェクトを持っています。コードのある時点で、最初のオブジェクトのコピーを 2 番目のオブジェクトに格納したいと考えています。

長い間、すべて正常に動作します。奇妙な部分にはノー。最初のオブジェクトに変更を加えると、同じ変更が 2 番目のオブジェクトに適用されます (これは意図したものではありません)。これは、2 つの間のある種の参照が保持されているためだと思います。

問題を示す例:

//First object
var person = {
    value: 1,
    item: 2
}

//Second object
var objSum = {
    contain: person,
    info: "other stuff"
}

//Apply change to first object
person.value = 55;
//Echoing second object
console.log(objSum);
    alert("done");

ログ出力: include => item: 2, value: 55. info: "other stuff"

次のようにしたい: 含む => 項目: 2、値: 1. 情報: 「その他のもの」

それはおそらく単純なことですが、私はそれを理解することができません。なぜこれが起こるのか、どうすればそれを防ぐことができますか

4

2 に答える 2

1

person-object を objSum.contain に割り当てるときに複製する必要があります。そうしないと、元のオブジェクトへの参照が割り当てられます。最も簡単な方法はjqueryを使用することです:

var objSum = {
    contain: jQuery.extend({}, person);
};

また

var objSum = {
    contain: jQuery.extend(true, {}, person);
};

人物自体にもオブジェクトが含まれている場合

于 2013-10-26T12:10:21.677 に答える
1

オブジェクト「person」を参照するのではなく、複製する必要があります。

オブジェクトを複製するにはいくつかの方法があり、有名な質問と回答もあります...

JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?

あなたの場合、JSON メソッドを使用しても問題ありません。

//First object
var person = {
    value: 1,
    item: 2
}

//Second object
var objSum = {
    contain: JSON.parse(JSON.stringify(person)), //clone object
    info: "other stuff"
}

//Apply change to first object
person.value = 55;
//Echoing second object
console.log(objSum);
alert("done");
于 2013-10-26T12:15:55.190 に答える