专栏首页搞前端的李蚊子js实现深拷贝和浅拷贝

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的类型,指定子集对象属性的类型

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Js基础---红宝书读书日记(1)-------基本类型和引用类型

    JS的变量可能包含两种不同数据类型的值,基本类型和引用类型; 基本类型是指简单的数据段,引用类型是指可能由多个值构成的对象; JS高级程序设计第三章介绍了变量分...

    李文杨
  • 动态计算rem的js代码

    以最小1024尺寸为例: function rem() { var htmlEle = document.documentElement; va...

    李文杨
  • 关于vue的使用计算属性VS使用计算方法的问题

     在vue中需要做一些计算时使用计算属性和调用methods方法都可以达到相同的效果,那么这两种使用方式的区别在哪里: <div id="example"> ...

    李文杨
  • 设计模式之对象池模式

    对象池模式, 或者称为对象池服务, 其意图为: 通过循环使用对象, 减少资源在初始化和释放时的昂贵损耗(这里的"昂贵"可能是时间效益(如性能), 也可能是空间效...

    烟草的香味
  • 设计模式六大原则——迪米特法则(LoD)

       在图书馆借书,刚开始的时候,直接跑到相应的楼层去,到里面去转,去找要借的书,在里面溜达半天才能找到;后来知道图书馆有一个电脑查询处,然后直接在电脑上输入...

    令仔很忙
  • Python 初识面向对象#学习猿地

    > 面向对象编程——Object Oriented Programming,简称`OOP`,是一种**以对象为中心**的程序设计思想。

    学习猿地
  • Python 初识面向对象#学习猿地

    > 面向对象编程——Object Oriented Programming,简称`OOP`,是一种**以对象为中心**的程序设计思想。

    学习猿地
  • 你不可不知的23种设计模式

    目录 创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) 3. Builder(建造者) 4. Prot...

    智能算法
  • 面试官问我JVM垃圾回收算法,还好我看了这篇

    程序计数器、虚拟机栈、本地方法栈都是线程私有的,会随着线程而生,随线程而灭; 栈中的栈帧随着方法的进入和退出有条不紊的执行着出栈和入栈操作. 每个栈帧中的本...

    JavaEdge
  • 一句话描述 Java 设计模式

    桥接:面向两个接口,无关接口的实现; 抽象化与实现化解耦,使得二者可以独立变化;例:笔与图形,笔可以画图形,笔可以有铅笔,圆珠笔等,图形可以有圆形,方形等;Ec...

    WindWant

扫码关注云+社区

领取腾讯云代金券