基本的には、obj1
をプロトタイプとして使用しています。それが使用されると、浅いオブジェクトのコピーを行います。これは、トップレベルが異なることを意味します(つまり、obj2.prop
を変更した場合はobj1.prop
には影響しませんが、下位レベルは同じものへの参照なので、変更すると物が変更されます)
同じですObject.assign()
て:あなたは何かを複数のレベルダウンとそれを変更しないようにしたい場合は
// Shallow-copy of one level, don't affect each other
const obj1 = { a: 1 };
const obj2 = Object.assign({}, obj1);
obj2.a = 2;
console.log(obj1.a, obj2.a);
// Shallow-copy, change top-level, don't affect each other
const obj3 = { a: { b: 1 } };
const obj4 = Object.assign({}, obj3);
obj4.a = 3;
console.log(obj3.a, obj4.a);
// Shallow-copy, change inner object, affects each other
const obj5 = Object.assign({}, obj3);
obj5.a.b = 2;
console.log(obj3.a.b, obj5.a.b);
、あなたは深いコピー/クローンを行う必要があります
。
(このような関数を実装するライブラリはたくさんありますので、ここでは再実装しません)
obj1を** obj2の**プロトタイプ**に設定しました'、それが理由です! – adeneo
obj2.propはプロトタイプに解決されます。その名前を設定すると編集されます。 –