美文网首页
js实现对象的复制,不影响原对象

js实现对象的复制,不影响原对象

作者: 氨基钠 | 来源:发表于2020-10-26 13:23 被阅读0次

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}}

相关文章

网友评论

      本文标题:js实现对象的复制,不影响原对象

      本文链接:https://www.haomeiwen.com/subject/qaeamktx.html