本文介绍一个基于递归的 JavaScript 深拷贝函数实现。该函数通过判断输入对象的类型(对象或函数),分别处理普通对象、数组及函数类型的克隆逻辑。代码包含防止特定属性被拷贝的参数支持,并展示了如何区分数组与对象以返回正确的结构类型。
JavaScript 深拷贝函数实现解析
定义名为 objectClone 的函数,接收两个参数:待拷贝的对象 obj 以及可选的 preventName 参数。
首先判断传入对象 obj 的类型是否为 object。
若类型为 object,则根据对象是否具有 sort 方法(通常用于数组)来初始化返回值 res,若无 sort 方法则初始化为空对象 {},否则初始化为空数组 []。
使用 for-in 循环遍历对象 obj 的所有可枚举属性。
在遍历过程中,检查当前属性名 i 是否不等于 preventName。
若属性名符合排除条件,则递归调用 objectClone 函数处理该属性的值 obj[i],并将结果赋值给返回值 res 的对应属性 res[i]。
}
完成遍历后,返回构建好的结果对象或数组 res。
若初始类型判断 obj 不是 object,则进一步判断其类型是否为 function。
若类型为 function,则通过 new 关键字实例化该函数,并返回其实例的 constructor 属性。
}
若以上条件均不满足,则直接返回原始对象 obj。
}