博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
21、深度克隆。
阅读量:7104 次
发布时间:2019-06-28

本文共 1357 字,大约阅读时间需要 4 分钟。

hot3.png

一、什么叫深度克隆。

浅克隆一般只是把obj1的引用赋值给obj2。深克隆就是完全复制另一个对象。

我们根据obj1复制一个对象obj2,当操作改变obj2的值时,不影响obj1的值。他们2个是完全独立的对象。

基本数据类型的赋值,都是深克隆。

二、深度克隆用到的技术点。

  1. typeof 操作符返回 String、 Number、 Boolean 、Undefined、 Object、 Function。
  2. Object.prototype.toString.call(obj) 返回obj对象的数据类型。
  3. for...in  循环,遍历数组的时候,返回数组下标;遍历对象的时候,返回对象的属性名。

三、深度克隆的实现。

//检查对象的类型    function checkType(target) {        //用当前对象,调用Object的toString方法。        return Object.prototype.toString.call(target).slice(8,-1);    }    //深克隆的方法。    function clon(target) {        let targetType = checkType(target);        let result;        if (targetType === 'Object'){            result = {};        }else if (targetType === 'Array'){            result = [];        }else {            return target;        }        for (let i in target){            let value = target[i];//拿到数组,或者对象的值。            if (checkType(target) === 'Object' || targetType === 'Array'){                //组装新的对象                result[i] = clon(value);            }else {                result[i] = value;            }            return result;        }    }

 

四、测试。

//测试    let obj1 = {        username :"zs",        age: 23,        child :["z1","z2"]    }    let obj2 = clon(obj1);    obj2.child = 3;    //{username: "zs", age: 23, child: Array(2)}    // {username: "zs", child: 3}    console.log(obj1,obj2);

 

 

转载于:https://my.oschina.net/kunBlog/blog/1784691

你可能感兴趣的文章
UIImageView上添加UIButton,button的点击事件无法响应
查看>>
网络编程学习——Unix域协议
查看>>
队列的使用
查看>>
Java Annotation入门
查看>>
java--序列化及其算法透析
查看>>
GenMyModel:拥有代码生成功能的法国创新型UML工具来袭
查看>>
nexus 手册
查看>>
【hadoop】15.HDFS-其他功能
查看>>
照葫芦画瓢-reading files(读文件)
查看>>
HTTP协议详解(转)
查看>>
Android零基础入门第54节:视图切换组件ViewSwitcher
查看>>
083-使用shell和expect一键批量分发SSH密钥脚本
查看>>
线上采购注意了
查看>>
压缩与打包
查看>>
配置Tomcat虚拟主机
查看>>
Vue.JS 开发常见问题集锦
查看>>
springboot原理—一步步分析springboot启动机制(starter机制)
查看>>
0037-如何在Windows Server2008搭建DNS服务并配置泛域名解析
查看>>
.net core入门之HelloWorld
查看>>
OSChina 周六乱弹 ——给媳妇打电话,一个男人的声音……
查看>>