1、JSON
利用JSON的stringify和parse方法
let Person = {
name: '张三',
age: 18,
introduce: function() {
console.log('我叫张三!')
},
test: undefined
}
let P1 = JSON.parse(JSON.stringify(Person));
P1.name = '李四';
console.log(Person); // {name: "张三", age: 18, test: undefined, introduce: ƒ}
console.log(P1); // {name: "李四", age: 18}
缺点:JSON.stringify()方法在将对象转为字符串时,会丢失方法属性和值为undefined的属性。
2、自定义深拷贝函数
let Person = {
name: '张三',
age: 18,
introduce: function() {
console.log('我叫张三!')
},
test: {
n: 1
},
a: [1,2,3,{m:1}]
}
function deepCopy(obj) {
let newObj = Array.isArray(obj)?[]:{};
for(let key in obj) {
if(obj.hasOwnProperty(key)) {
if(typeof obj[key] === 'object') {
newObj[key] = deepCopy(obj[key]);
} else {
newObj[key] = obj[key];
}
}
}
return newObj;
}
let P1 = deepCopy(Person);
console.log(P1); // {name: "张三", age: 18, test: {n:1}, a: [1,2,3,{m:1}], introduce: ƒ}