js中如何实现this的深拷贝?

如果使用for循环深度遍历,会导致死循环;
或许可以使用 loadsh库的deepclone来实现,还有什么方式吗,原因是什么?

阅读 315
评论
    5 个回答

    生产中可以使用: circular-json 库来实现,避免JSON.stringify, JSON.parse处理循环报错的问题;
    实现原理是:转成序列化后,循环引用的对象使用一个特殊的字符器标记来代替,parse的过程再把标记转成要引用的那个对象(this)

      死循环是递归写得有问题。
      深拷贝如果只是拷贝一些数组json数据,简单粗暴用:JSON.parse(JSON.stringify('xxxxxxx'))

        • 4.8k

        死循环一般是copy过程中对象出现了循环引用自己。可以在递归过程中加个map存储copy过程中的对象,来应对可能出现的循环引用自己的情况。

          • 1.1k

          不要滥用深拷贝,this也不应该被拷贝,需要拷贝的仅仅是部分数据,只深拷贝白名单中的部分数据就行。

            deepCopy (obj) {
                    var newobj = obj.constructor === Array ? [] : {};
                    if(typeof obj !== 'object'){
                        return;
                    }
                    for(var i in obj){
                    newobj[i] = typeof obj[i] === 'object' ? utils.deepCopy(obj[i]) : obj[i];
                    }
                    return newobj
            }
              撰写回答

              登录后参与交流、获取后续更新提醒

              相似问题
              推荐文章