const _completeDeepClone = (target, map = new Map()) => { if (typeof target != 'object' || !target) return target let constructor = target.constructor if (/^(Function|RegExp|Date|Map|Set)$/i.test(constructor.name)) return new constructor(target) // 判断是否循环引用的(判断属性是不是存在了) if (map.get(target)) return map.get(target) let result = new target.constructor() // 存target map.set(target, result) // let result = Array.isArray(target) ? [] : {} for (let key in target) { if (target.hasOwnProperty(key)) { result[key] = _completeDeepClone(target[key], map) } } return result }