方式1 :已知结构
let state = {a: {a1: 1, a2: 2}, b: 2}
let state2 = { ...state, a: { ...state.a } }
方式2:最简单但不能复制函数
JSON.parse(JSON.stringify(obj))
方式3:多种数据类型全支持
function DeepClone (obj) {
if (obj === null || typeof obj !== 'object') return obj;
var cpObj = obj instanceof Array ? [] : {};
for (var key in obj) cpObj[key] = DeepClone(obj[key]);
return cpObj;
}
var obj = {
id: 1,
name: 'xxx',
sayName: function (a) {
console.log('my name is ' + a);
},
childs: [
{'a': 1},
{'c': 'd'},
],
opts: {
xxx: [1,2,'3'],
aa: 'bb'
},
};
var newObj = DeepClone(obj);
console.log(obj)
console.log(newObj)
obj.id = 2
console.log("obj.id", obj.id) // 2
console.log("newObj .id", newObj .id) // 1
obj.sayName('hah')
newObj.sayName('22')
obj.sayName = 3
console.log(obj.sayName) // 3
console.log(newObj.sayName) // function