function extendDeep() {
let deep = false, args = Array.from(arguments)
if (typeof arguments[0] === "boolean") {
deep = args.shift()
}
target = args.shift()
args.forEach(item => {
for (let i in item) {
if (typeof item[i] === "object" && deep) {
// 这里出了问题 ↓ 明明把递归后组合的对象赋值给了target["b"],却导致target自身被覆盖了
console.log("递归之前:", target, i)
target[i] = extendDeep(deep, target[i], item[i])
console.log("递归之后:", target)
} else {
target[i] = item[i]
}
}
})
return target
}
// -----------------------------------------------
var obj1 = {
a: 1,
b: { b1: 1, b2: 2 }
};
var obj2 = {
b: { b1: 3, b3: 4 },
c: 3
};
var obj3 = {
d: 4
}
console.log("最终结果:", extendDeep(true, obj1, obj2, obj3));
期望的结果是第二个打印为 递归之后:{a:1, b:{b1:3, b2:2, b3: 4}}
底子比较薄弱,第一次碰到这种问题,完全没有头绪哪里出错了,望大佬提点o(╥﹏╥)o
函数内声明一下target,不然变成全局变量共用了。