1. 程式人生 > >js實現物件的複製,不影響原物件

js實現物件的複製,不影響原物件

1.Object.assign(target,…sources) 因為 Object.assign()拷貝的是屬性值。假如源物件的屬性值是一個指向物件的引用,它也只拷貝那個引用值。

eg:

var obj1 = { a: 0 , b: { c: 0}};
var obj2 = Object.assign({}, obj1);//將obj的可列舉的屬性值複製到{}中
console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}}

obj1.a = 1;
console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}}
console.log(JSON.stringify(obj2)); // { a: 0, b: { c: 0}} obj2.a = 2; console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 0}} console.log(JSON.stringify(obj2)); // { a: 2, b: { c: 0}} obj2.b.c = 3;//會影響到源物件,因為此屬性值是一個指向物件的引用 console.log(JSON.stringify(obj1)); // { a: 1, b: { c: 3}} console.log(JSON.stringify(
obj2)); // { a: 2, b: { c: 3}}

2.當源物件的屬性值是一個指向物件的引用時,應用深度複製

// Deep Clone
  var obj1 = { a: 0 , b: { c: 0}};
  var obj3 = JSON.parse(JSON.stringify(obj1));//先將obj轉換為JSON字串,然後再轉回物件
  obj1.a = 4;
  obj1.b.c = 4;
  console.log(JSON.stringify(obj3)); // { a: 0, b: { c: 0}}