浅克隆,深克隆实现

本文详细解释了浅克隆和深克隆的概念,通过具体的JavaScript示例代码展示了两种克隆方式的区别。浅克隆仅复制对象的第一层属性,而深克隆会递归复制所有层级的属性,包括嵌套的对象和数组。

浅克隆

 obj = {
            name: 'hu_time',
            age: 23,
            sex: 'male'
        }
        var obj1 = {};
         // 浅克隆
        function clone(origin, target) {
            var target = target || {};
            for (let prop in origin) {
                target[prop] = origin[prop]
            }
        }
        clone(obj, obj1);

浅克隆克隆的对象信息在新的克隆对象中,对嵌套的数据还是会有有影响的

深克隆

        obj = {
            name: 'hhhh',
            age: 23,
            card: ['visa', 'master'],
            wife: {
                name: 'abc',
                son: {
                    name: 'aaa'
                }
            }
        }

        obj1 = {}
        
        function deepClone(origin, target){
            var target = target || {},
                toStr = Object.prototype.toString,
                arrStr = "[object Array]";
            for(var prop in origin){
            	// 避免拿到原型链上的属性
                if(origin.hasOwnProperty(prop)){
                	// 判断是否是对象
                    if(typeof(origin[prop]) == 'object'){
                        target[prop] = toStr.call(origin[prop]) == arrStr ? [] : {}; 
                        deepClone(origin[prop], target[prop])
                    }else {
                        target[prop] = origin[prop]
                    }
                }
            }
            return target;
        }
        deepClone(obj, obj1);

VUE深克隆

	JSON.parse(JSON.stringify(this.array))
  遍历对象 for(var prop in obj)

1.判断是不是原始值 typeOf() object
2.判断是数组还是对象 typeof() object 1.instanceof 2.tostring 3.construtor
3.建立相应的数组或对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值