var obj = {
name: '欧元',
age: 2,
card: ['洗澡', '吃饭', '睡觉', '逗猫棒', '喝水'],
soul: {
name: '美元',
son: {
name: "欧美"
}
}
}
var obj2 = {
}
// 遍历对象 for in
// 1. 判断是不是原始值 typeof() object instanceof toString constructor
// 2. 判断是数组还是对象
// 3. 建立相应的数组或对象
function deepClone(origin, target) {
var target = target || {},
toStr = Object.prototype.toString,
arrStr = "[object, Array]";
for (var prop in origin) {
// 不要取原型链上的东西
if (origin.hasOwnProperty(prop)) {
if (origin[prop] != "null" && typeof (origin[prop]) == "object") {
if (toStr.call(origin[prop]) == arrStr) {
// 数组
target[prop] = []
} else {
// 对象
target[prop] = {}
}
deepClone(origin[prop], target[prop])
} else {
target[prop] = origin[prop]
}
}
}
}
deepClone(obj, obj2)
obj2.soul.name="人民币"
console.log('obj', obj)
console.log('obj2', obj2)