js实现深拷贝和浅拷贝

时间:2022-05-04
本文章向大家介绍js实现深拷贝和浅拷贝,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

浅拷贝:

思路----------把父对象的属性,全部拷贝给子对象,实现继承。

问题---------如果父对象的属性等于数组或另一个对象,那么实际上,子对象获得的只是一个内存地址,不会开辟新栈,不是真正拷贝,因此存在父对象被篡改的可能。

代码:

function deepCopy(o){
    var f = {};
    for(i in o){
        f[i] = o[i];
    };
    return f
}

深拷贝:

思路-----------递归调用'浅拷贝',可以解决子对象修改时会污染父对象,此时两个对象指向的不是一个内存地址。

代码:

function deepCopy(p,c){  // p 父级对象  c 子集对象 
  var c = c || {};
   for(let i in p){
      // 如果父级对象的其中一个属性是对象
      if(typeof p[i]==='object'){
        
           c[i] = (p[i].constructor===Array)?[]:{}; //通过判断父级对象的属性的constructor的类型,指定子集对象属性的类型