js 深度克隆

博客介绍了JS中的两种赋值形式,即值引用和址引用,一般对象赋值为地址引用,修改新对象会改变内存区地址上的值。为实现值引用,引入深度克隆概念,还提到一种实现方式是利用JSON转换,并欢迎大家补充这种转换方式的弊端。

js中赋值主要有两种赋值形式,一种是值引用,另一种是址引用(地址)。

一般对象赋值的时候,都是地址引用,所以在修改新对象的时候,其实修改了在内存区地址上的值。

为了达到值引用的效果,所以有 深度克隆的概念。   ps:自己理解的,被误导了别怪我

实现方式一:

function deepClone(origin, target) {
    var target = target || {},
        toStr = Object.prototype.toString,
        arrStr = '[object Array]';

    for (var prop in origin) {
        if (origin.hasOwnProperty(prop)) {
            if (origin[prop] !== 'null' && typeof (origin[prop]) == 'object') {
                if (toStr.call(origin[prop]) == arrStr) {
                    target[prop] = []
                } else {
                    target[prop] = {}
                }
                deepClone(origin[prop], target[prop])
            }
        } else {
            target[prop] = origin[prop];
        }
    }
    return target;
}

  实现方式二:利用JSON转换   

function deepClone(origin,target){
    var target = target || {};
    target = JSON.parse(JSON.stringify(origin));
    return target;
}

  不知道大家为什么不喜欢用json转换 ,不知道这样转的弊端,欢迎大家补充。   

 

转载于:https://www.cnblogs.com/chris-zy/p/11174001.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值