1.最简单的方法,序列号反序列化一遍就好了,但是会丢失function,undefined或者NaN的属性
JSON.parse(JSON.stringify(xxx));
2.自己写一个方法,遍历获取属性
function deepClone(obj) {let objClone;if (obj && (obj.constructor == Object || obj.constructor == Array)) {objClone = new obj.constructor();} else {return obj;}for (const key in obj) {if ({}.hasOwnProperty.call(obj, key)) {objClone[key] = deepClone(obj[key]);}}return objClone;
}
后续百度了发现还有其他方法,在这补充一下
原文:https://zhuanlan.zhihu.com/p/78234841
3.通过Object.getPrototypeOf() 获取目标对象的原型,通过Object.assign()生成一个新的对象
function deepclone(target) {if (typeof target !== "object") return target;return Object.assign({},Object.create(Object.getPrototypeOf(target)),target);
}
4.通过Object.getPrototypeOf() 获取目标对象的原型,通过扩展运算符以及proto来实现深度克隆(仅适用于浏览器端)
function deepclone(target) {if (typeof target !== "object") return target;return {__photo__: Object.getPrototypeOf(target),...target};
}