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
    }