# cloneDeepWith
# Description
这个方法类似 cloneWith,除了它会递归拷贝 value。
# Params
(value, customizer)
customizer -- 拷贝的方法
# Return
{*}
-- 拷贝的结果
# Depend
import baseClone from './.internal/baseClone.js'
# Code
const CLONE_DEEP_FLAG = 1
const CLONE_SYMBOLS_FLAG = 4
function cloneDeepWith(value, customizer) {
customizer = typeof customizer === 'function' ? customizer : undefined
return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer)
}
# Analyze
- 判断了传入的
customizer
是否为function
,如果是function
,则使用 传入的customizer
,否则就定义为undefined
,使用baseClone
的逻辑 - 这里和
cloneDeep
一致,也是 深拷贝 和 拷贝 symbol (4 | 1)
4 | 1 // 0100 | 0001 => 5
# Remark
# Example
function customizer(value) {
if (isElement(value)) {
return value.cloneNode(true)
}
}
const el = cloneDeepWith(document.body, customizer)
console.log(el === document.body) // => false
console.log(el.nodeName) // => 'BODY'
console.log(el.childNodes.length) // => 20