UNPKG

muz-doraemon

Version:

自主开发的UniApp组件——Жидзин(Zidjin)系列组件库。

25 lines (20 loc) 1.26 kB
function deepClone(target, hash = new WeakMap()) { // 额外开辟一个存储空间WeakMap来存储当前对象 if (target === null) return target; // 如果是 null 就不进行拷贝操作 if (target instanceof Date) return new Date(target); // 处理日期 if (target instanceof RegExp) return new RegExp(target); // 处理正则 // #ifdef H5 if (target instanceof HTMLElement) return target; // 处理 DOM元素 // #endif if (typeof target !== 'object') return target; // 处理原始类型和函数 不需要深拷贝,直接返回 // 是引用类型的话就要进行深拷贝 if (hash.get(target)) return hash.get(target); // 当需要拷贝当前对象时,先去存储空间中找,如果有的话直接返回 const cloneTarget = new target.constructor(); // 创建一个新的克隆对象或克隆数组 hash.set(target, cloneTarget); // 如果存储空间中没有就存进 hash 里 Reflect.ownKeys(target).forEach(key => { // 引入 Reflect.ownKeys,处理 Symbol 作为键名的情况 cloneTarget[key] = deepClone(target[key], hash); // 递归拷贝每一层 }); return cloneTarget; // 返回克隆的对象 } export default deepClone;