1 .克隆的概念
克隆或者拷贝分为2种: 浅度克隆 、 深度克隆 。
浅度克隆 :基本类型为值传递,对象仍为引用传递。
深度克隆 :所有元素或属性均完全克隆,并于原引用类型完全独立,即,在后面修改对象的属性的时候,原对象不会被修改。
深克隆的源码:
<script>
const deepClone = function(obj) {
// 先检测是不是数组和Object
// let isArr = Object.prototype.toString.call(obj) === '[object Array]';
let isArr = Array.isArray(obj);
//检测是不是对象
let isJson = Object.prototype.toString.call(obj) === '[object Object]';
if (isArr) {
// 克隆数组
let newObj = [];
for (let i = 0; i < obj.length; i++) {
newObj[i] = deepClone(obj[i]);
}
return newObj;
} else if (isJson) {
// 克隆Object
let newObj = {};
for (let i in obj) {
newObj[i] = deepClone(obj[i]);
}
return newObj;
}
// 不是引用类型直接返回
return obj;
};
Object.prototype.deepClone = function() {
return deepClone(this); //将该深克隆的方法设置在原型上去
};
Object.defineProperty(Object.prototype, 'deepClone', {
enumerable: false//是否可枚举
});
</script>
测试深克隆
var obj1 = {
a: 'jack',
b: 'name',
c: {
m: 'de',
n: 'dd',
z: {
a: {
a: [1, 2, 3]
}
}
}
}
console.log(obj1)
let obj2 = deepClone(obj1);
console.log(obj2)