(1)代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>对象拷贝</title>
</head>
<body>
<script>
// 浅拷贝
const stu1 = {
name: '诸葛亮',
age: 20
};
function shallowCopystu(stu) {
const newStu1 = {};
for (let i in stu) {
newStu1[i] = stu[i];
}
return newStu1;
}
const newStu1 = shallowCopystu(stu1);
console.log('************************浅拷贝*************************');
stu1.name = 'man杨杨';
stu1.age = 18;
console.log(stu1);
console.log(newStu1);
// 深拷贝
// 方法一(递归)
const stu2 = {
name: '诸葛亮',
age: 30,
wife: {
name: '粉刷匠',
age: 28
},
childrens: [{
name: '臭皮匠1',
age: 7
}, {
name: '臭皮匠2',
age: 5
}, {
name: '臭皮匠3',
age: 3
}]
}
function deepCopy(object) {
const newObject = {};
for (let i in object) {
if (object[i] instanceof Object) {
// 运用递归实现深拷贝
newObject[i] = deepCopy(object[i]);
} else {
newObject[i] = object[i];
}
}
return newObject;
}
const newStu2 = deepCopy(stu2);
stu2.age = 29;
stu2.wife.age = 27;
stu2.childrens[1].age = 4;
console.log('*************************深拷贝(递归)*************************');
console.log(stu2);
console.log(newStu2);
// 方法二(通过json转换)
const stu3 = {
name: '诸葛亮',
age: 30,
wife: {
name: '粉刷匠',
age: 28
},
childrens: [{
name: '臭皮匠1',
age: 7
}, {
name: '臭皮匠2',
age: 5
}, {
name: '臭皮匠3',
age: 3
}]
}
let stu3String = JSON.stringify(stu3);
const newStu3 = JSON.parse(stu3String);
stu3.name = '无名氏';
stu3.wife.name = '无名';
stu3.childrens[2].name = '无名之子';
console.log('*********************深拷贝(json)********************************');
console.log(stu3);
console.log(newStu3);
</script>
</body>
</html>
(二)输出结果
1、浅拷贝
2、深拷贝(递归)
3、深拷贝(json转换)