<script>
const oldObj = {
name: 'susu',
age: 18,
colors: ['skyblue', 'lightpink', 'black'],
friend: {
name: 'chenchen'
}
}
function deepClone(obj) {
/* 后面遍历属性得到 (例: "name:'susu'")
得到的是属性的值(原始类型) 直接将值返回并拷贝赋值*/
if (typeof obj !== 'object' || obj == null) {
return obj
}
let result
if (obj instanceof Array) {
result = []
} else {
result = {}
}
for (let key in obj) {
/* 确保拷贝的是当前对象上的属性 不拷贝原型上的属性或方法 */
if (obj.hasOwnProperty(key)) {
/* 递归 如果属性是对象,就需要递归拷贝出属性中的属性
如:oldObj:{
friend: {
name: 'chenchen'
}} */
result[key] = deepClone(obj[key])
}
}
return result
}
const newObj = deepClone(oldObj)
newObj.name = 'heihei'
console.log(oldObj.name) //'susu'
console.log(newObj.name) //'heihei'
</script>