<script>
function cloneObject(target, source) {
// 先取出 对象的所有属性
var names = Object.getOwnPropertyNames(source)
// 把全部属性进行遍历
for (var i = 0; i < names.length; i++) {
var desc = Object.getOwnPropertyDescriptor(source, names[i])
console.log(desc)
// 对属性值的类型进行判断
if (typeof(desc.value) === "object" && desc.value !== null) {
var obj
// 判读是否为数组
if (Array.isArray(desc.value)) {
obj = []
} else {
// 为对象
obj = {}
}
Object.defineProperty(target, names[i], {
configurable: desc.configurable,
enumerable: desc.enumerable,
value: obj,
writable: desc.writable
})
cloneObject(obj, desc.value)
} else {
Object.defineProperty(target, names[i], desc)
}
}
}
var obj = {
a: 1,
b: 2,
c: {
d: [1, 2, 3, 4, 5],
f: {
g: '123'
}
}
}
var obj1 = {}
cloneObject(obj1, obj)
console.log(obj1)
</script>
</body>
JavaScript中深复制
最新推荐文章于 2023-09-18 13:46:43 发布