我找到了这个用于复制对象的 JavaScript 代码,代码正在做它应该做的事情,但我不明白的是函数何时调用自身;为什么newObject在第一次迭代中没有丢失它的值,它应该在函数调用自身并创建一个新的时被覆盖newObject?这是否意味着当一个函数调用自身时,它仍然保留newObject在它调用自身之前创建的第一个副本?
const o = {
a: 'a',
b: 'b',
obj: {
key: 'key',
},
}
const o2 = o
o2.a = 'new value'
// o and o2 reference the same object
console.log(o.a)
// this shallow-copies o into o3
const o3 = Object.assign({}, o)
// deep copy
function deepCopy(obj) {
// check if vals are objects
// if so, copy that object (deep copy)
// else return the value
const keys = Object.keys(obj)
const newObject = {}
for (let i = 0; i < keys.length; i++) {
const key = keys[i]
if (typeof obj[key] === 'object') {
newObject[key] = deepCopy(obj[key])
} else {
newObject[key] = obj[key]
}
}
return newObject
}
const o4 = deepCopy(o)
o.obj.key = 'new key!'
console.log(o4.obj.key)
相关分类