美文网首页
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