2

オブジェクトを作成するスクリプトを作成していて、そのコピーを作成したいのですが、オブジェクトを別の変数に割り当てると、変更すると両方が変更されます。

私は本を​​読んでいますが、それは値ではなく参照であると理解していますが、オブジェクトをコピーして、その時点から個別に扱いたいと考えています。これは私がすることの例です:

var myObject = {};
var copyOfMyObject = myObject;
myObject.foo = 'bar';

console.log(myObject, copyOfMyObject);

//logs Object {foo="bar"} Object {foo="bar"}

オブジェクト全体をコピーして、他のオブジェクトに影響を与えずにプロパティを個別に変更する方法はありますか?

4

1 に答える 1

1

各プロパティを新しい配列にマップする必要があります。

単純な 1 レベルのクローンは、次のように作成できます。

function clone(a, b) {
    var prop;
    for( prop in b ) {
        b[prop] = a;
    }
}

bこれにより、すべてのプロパティが からに複製されaます。ただし、他のすべてのプロパティは次のように保持しますa

var a = {a: 9, c: 1},
    b = {a: 1, b: 1};

copy(a, b); // {a: 1, b: 1, c: 1}

ディープ クローン オブジェクト:

上記の例は、単一レベルのオブジェクトを扱う場合は機能しますが、複数のレベルが存在する場合は混乱を招きます。次の例を見てください。

var a = {},
    b = { a: { a: 1 } }

clone(a, b);

a.a.a = 2; 
console.log(a); // { a: { a: 2 } }
console.log(b); // { a: { a: 2 } }

上記の例は、内部のオブジェクトが内部のオブジェクトa.aと同じであることを証明していますb.a

于 2013-06-02T18:21:33.303 に答える