一、消息通道
采用消息通道,即可实现
function deepClone(obj) { return Promise((resolve) => { const { port1, port2 } = new MessageChannel(); port1.postMessage(obj); port2.onmessage = (msg) => { resolve(msg.data); } }) }
二、递归
使用递归
function deepClone(obj) { const objectMap = new Map(); const _deepClone = (value) => { const _typeof = typeof value; const type = Object.prototype.toString.call(value); // 此处仍需各种判断,如:date if (_typeof !== 'object' || value === null || type === '[object Date]' || type === '[object RegExp]' || type === '[object Error]') { return value; } if (objectMap.has(value)) { return objectMap.get(value); } const result = Array.isArray(value) ? [] : {}; objectMap.set(value, result); for (const key in value) { result[key] = _deepClone(value[key]); } return result; } return _deepClone(obj); }