Javascript深度克隆一个对象

 

Javascript中的对像赋值与Java中是一样的,都为引用传递。就是说,在把一个对像赋值给一个变量时,那么这个变量所指向的仍就是原来对

像的地址。那怎么来做呢?答案是“克隆”。

克隆有两种方法:一种是“浅克隆”,一种是“深克隆”(深度克隆)。

浅克隆:基本类型为值传递,对象仍为引用传递。

深克隆(深度克隆):所有元素均完全复制,并于原对象完全独立(原对象的修改不影响新对象)。

深度克隆的代码如下(深克隆去掉递归即为浅克隆):

Object.prototype.clone = function(){
        var o = this.constructor === Array ? [] : {};
        for(var e in this){
                o[e] = typeof this[e] === "object" ? this[e].clone() : this[e];
        }
        return o;
}

使用示例:

obj1 = {name: "flondon", add: "China"};

obj2 = obj1.clone();

注视事项:

网上流传的很多克隆方法都存在克隆不彻底的问题,比如新对象的构造器与原对象的构造器不相同等等,而上面的代码是笔者针对这些问题

重写的代码,并经过大量的测试。(如发现问题请即时留言反馈)

原作者:微米博客

转载于:https://www.cnblogs.com/bluers/p/3365223.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值