克隆与深度克隆
2019-12-15 21:31 张海峰999 阅读(244) 评论(0) 收藏 举报1.浅克隆
 var lilei = {
                sname: "lilei",
                sage: 20,
                intr() {
                    console.log(`我是${this.sname},今年${this.sage}`);
                }
            }
            // lilei.intr()
        function clone(obj) {
            var newObj = {};
            for (var key in obj) {
                newObj[key] = obj[key];
            }
            return newObj;
        }
        var hmm = clone(lilei);
        console.log(hmm);
2.深度克隆
function checkType(data) { // 用来判断被拷贝对象数据类型的函数
	            return Object.prototype.toString.call(data).slice(8, -1)
	        }
		function deepClone(target) { // 实现深度拷贝的函数
            var result, targetType = checkType(target);//Array Object
            if (targetType === 'Object') { // 只有对象和数组才进行深度拷贝
                result = {}
            } else if (targetType === 'Array') {
                result = []
            } else {//如果return 证明target是基本数据类型,并且将整个函数结束了
                return target
            }
            for (var i in target) { // i为对象的key或数组的下标
                //获取属性名为i的属性值
                var value = target[i]
                // 检测当前属性的类型
                var valueType = checkType(value);//String Number Array
                if (valueType === 'Object' || valueType === 'Array') {
                    result[i] = deepClone(value) // 当拷贝的对象中还有数组或是对象时进行递归,克隆它们中的内容,直到递归完所有数组或对象为止
                } else {
                    result[i] = value
                }
            }
            return result // 返回最终的结果
    	}
    	var arr = [1,2,{username:"xiaohu"}]
    	var arr2 = deepClone(arr)
    	arr2[2].username = "dahu"
    	console.log(arr)
    	console.log(arr2)
 
                     
                    
                 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号