浅拷贝:
Object.prototype.num = 1
let obj = {
name: 'xxx',
age: 18,
thing: {
pen: 1,
car: 2
}
}
let obj1 = {}
clone(obj, obj1)
function clone(origin, target){
var target = target || {}
for(let i in origin){
if(origin.hasOwnProperty(i)){
target[i] = origin[i]
}
}
}
console.log(obj1)
// 浅拷贝问题所在
obj1.thing.pen = 22
console.log(obj)
console.log(obj1)
深拷贝:
Object.prototype.num = 1
let obj = {
name: 'xxx',
age: 18,
thing: {
pen: 1,
car: 2
}
}
// 方法1: 原生JS实现
let obj1 = {}
deepClone(obj, obj1)
function deepClone(origin, target){
var target = target || {},
toStr = Object.prototype.toString
for(let key in origin){
if(origin.hasOwnProperty(key)){
if(typeof(origin[key]) == 'object' && origin[key] !== null){
if(toStr.call(origin[key]) == '[object Object]'){
target[key] = {}
}else{
target[key] = []
}
deepClone(origin[key], target[key])
}else{
target[key] = origin[key]
}
}
}
}
obj1.thing.man = '1'
console.log(obj)
console.log(obj1)
// 方法2:JSON实现
let obj2 = JSON.stringify(obj)
obj2 = JSON.parse(obj2)
console.log(obj2)
obj2.thing.man = '222'
console.log(obj)
console.log(obj2)