function deepCopy(obj) {
// 如果不是对象,则直接返回
if (typeof obj !== 'object' || obj === null) {
return obj;
}
// 处理Date, RegExp, Function等特殊类型
if (obj instanceof Date) {
return new Date(obj);
}
if (obj instanceof RegExp) {
return new RegExp(obj);
}
if (typeof obj.clone === 'function') {
// 如果对象有clone方法,尝试调用该方法进行克隆
return obj.clone();
}
// 创建目标对象实例
let cloneTarget;
if (Array.isArray(obj)) {
cloneTarget = [];
} else {
cloneTarget = {};
}
// 遍历对象的每个属性
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
// 递归复制属性
cloneTarget[key] = deepCopy(obj[key]);
}
}
// 返回复制后的对象
return cloneTarget;
}
// 使用示例
const originalObj = {
a: 1,
b: {
c: 2,
d: [3, 4]
},
e: new Date(),
f: function() { console.log('hello'); }
};
const copiedObj = deepCopy(originalObj);
console.log(copiedObj===originalObj,'copiedObj');
前端面试js篇:利用js实现深拷贝
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 ...