资讯专栏INFORMATION COLUMN

对象的深复制

elva / 3007人阅读

摘要:异同浅复制影子克隆只复制对象的基本类型对象类型仍属于原来的引用。深复制深度克隆不紧复制对象的基本类同时也复制原对象中的对象。就是说完全是新对象产生的。注意事项直接在上实现该方法的好处是,所有对象都会继承该方法。

异同:

浅复制 (影子克隆): 只复制对象的基本类型, 对象类型, 仍属于原来的引用。
深复制 (深度克隆): 不紧复制对象的基本类, 同时也复制原对象中的对象。就是说完全是新对象产生的。

思路:

遍历所有该对象的属性,
如果该属性是 "object" 则需要特殊处理,
如果这个 object 对象比较特殊,是一个数组,那就创建一个新的数组并深复制数组里的元素
如果这个 object 对象是个非数组对象,那直接再对它递归调用深复制方法即可。
如果不是 "object",则直接正常复制就行。

注意事项:

直接在 Object.prototype 上实现该方法的好处是,所有对象都会继承该方法。坏处是某些库也会改写 Object 对
象,所以有时会发生冲突。这是需要注意的。

代码:
Object.prototype.deepCopy=function(){
    var obj={};//用于最后返回一个对象,这个对象是深复制的结果
    for(var attr in this){//遍历这个对象的每一个属性
        if(this.hasOwnProperty(attr)){//主要是递归自有属性
            if(typeof (this[attr]==="object")){//如果对象的属性是一个对象,就递归复制它的每一个属性
                if(this[attr]===null){//如果对象为null
                    obj[attr]=null;
                }else if(Object.prototype.toString(this[attr])==="[object Array]"){//如果是个数组
                    obj[attr]=[];
                    for(var i=0;i

ES6 版本

function deepCopy(obj){
    if(typeof obj === "object"){
        if(obj === null){
            return null;
        }
        let result = {};
        const keys = Object.keys(obj);
        const length = keys.length;
        for(let i=0;i           
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/80817.html

相关文章

  • 深入剖析 JavaScript 的深复制

    摘要:的不能算作深复制,但它至少比直接赋值来得深一些,它创建了一个新的对象。它们的主要用途是对存在环的对象进行深复制。比如源对象中的子对象在深复制以后,对应于。希望这篇文章对你们有帮助深复制方法所谓拥抱未来的深复制实现参考资料 本文最初发布于我的个人博客:咀嚼之味 一年前我曾写过一篇 Javascript 中的一种深复制实现,当时写这篇文章的时候还比较稚嫩,有很多地方没有考虑仔细。...

    gclove 评论0 收藏0
  • JS 中的深拷贝与浅拷贝

    摘要:什么是深拷贝浅拷贝见名知义,无论是深拷贝还是浅拷贝,都是的问题。使用如下以上就是关于中的深拷贝与浅拷贝的知识和如何进行深拷贝的知识了,如果有错或者有其他方式的话,欢迎在下面留言评论啦 前言 最近在写项目的时候涉及到一些父子组件传递个对象或者数组通信啥的,或者是直接复制添加对象啥的,直接使用赋值的时候总会出错。一查原来是浅拷贝的问题,就从网上找了点资料,汇总到这里来了。 1 什么是深拷贝...

    ztyzz 评论0 收藏0
  • 在js中的深复制实现方法

    摘要:针对本话题,我在年月发布了新的文章深入剖析的深复制要实现深复制有很多办法,比如最简单的办法有上面这种方法好处是非常简单易用,但是坏处也显而易见,这会抛弃对象的,也就是深复制之后,无论这个对象原本的构造函数是什么,在深复制之后都会变成。 针对本话题,我在2015年5月发布了新的文章:深入剖析 JavaScript 的深复制 要实现深复制有很多办法,比如最简单的办法有: var...

    Alliot 评论0 收藏0
  • Javascript中的深复制

    摘要:对一个对象或者数组这种引用类型的值进行复制可以分为浅复制和深复制,比如这样的一个对象很明显这个对象是存在两层的,不是基本类型值,而是另一个对象。上面讲的就是浅复制,在实际应用中存在很严重的问题。基于的做法是这样的浅复制深复制 对一个对象或者数组这种引用类型的值进行复制可以分为浅复制和深复制,比如这样的一个对象 let obj={ a:1, b:{ a:1...

    104828720 评论0 收藏0
  • Javascript中的深复制

    摘要:对一个对象或者数组这种引用类型的值进行复制可以分为浅复制和深复制,比如这样的一个对象很明显这个对象是存在两层的,不是基本类型值,而是另一个对象。上面讲的就是浅复制,在实际应用中存在很严重的问题。基于的做法是这样的浅复制深复制 对一个对象或者数组这种引用类型的值进行复制可以分为浅复制和深复制,比如这样的一个对象 let obj={ a:1, b:{ a:1...

    Lin_YT 评论0 收藏0

发表评论

0条评论

elva

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<