博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS的深度克隆,利用构造函数原型深度克隆
阅读量:7090 次
发布时间:2019-06-28

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

我爱撸码,撸码使我感到快乐!

大家好,我是Counter。
今天来写写,JS中的深度克隆,这个在笔面试中,考的还是比较多的,主要是对象与数组的赋值,如果直接赋值的话,那么得到的是对象或者数组在堆里的地址,那么原有的的数据修改的话,那么克隆的数据也会随着修改,这就是浅克隆,所以这边就要使用到枚举,然后再每一项赋值,这样就可以完成一份深度克隆,这样原对象里修改属性,如果你在这对象修改之前已经克隆的话,那么你这个克隆的对象,对象里的属性是不变,这就是深度克隆。
话不多说了,直接上代码:

// 假设要克隆的对象a        var a = {            a: 1,            b: 2,            c: {                d: 3,                e: 4,                f: [0, 9, 8, 7, [6, 5, 4]]            }        };        // 自定义克隆函数        function clone(obj) {            // 判断,如果传进来的参数是数组的话            if ( obj instanceof Array) {                // 定义一个空数组                var arr = [];                // 遍历整个数组                for( var i = 0; i < obj.length; i++) {                    // 深度克隆数组每一项                    arr[i] = clone(obj[i]);                }                // 再返回出去                return arr;            }            // 判断是否为对象            if ( obj instanceof Object) {                // 构建一个空对象                var obj1 = {};                // 枚举传进来的对象                for( key in obj) {                    // 深度克隆对象                    obj1[key] = clone(obj[key]);                }                // 再返回出去                return obj1;            }            // 如果传进的不是数组,也不是对象,那么就返回当前值            return obj;        }        // 利用构造函数的原型克隆,也可以实现深度克隆        function clone1(obj) {            function F() {};            F.prototype = obj;            return new F()        }

 

转载于:https://www.cnblogs.com/Counterrr/p/10622439.html

你可能感兴趣的文章
我的友情链接
查看>>
Facebook ATC 弱网测试项目部署
查看>>
关于p-vol和s-vol
查看>>
一八年第三天晚上十点半的thinking
查看>>
ksh和bash区别
查看>>
keepalived 组播的配置
查看>>
华为路由器交换机配置相关功能
查看>>
谷歌收购眼球追踪技术公司Eyefluence,眼动关注度将成为VR的新视角
查看>>
【蜕变之路】第32天 使用STS创建SpringBoot项目 (2019年3月22日)
查看>>
Oracle之数据挖掘的更新介绍
查看>>
NFS
查看>>
Exception异常处理
查看>>
第二十讲 任务的挂起和恢复
查看>>
emmm算是来了
查看>>
do…while语句
查看>>
网络工程师成长日记413-长安大学交换机项目
查看>>
jenkins
查看>>
设置中奖概率
查看>>
第4章 类名作为形参和返回值
查看>>
Java 正则表达式
查看>>