当前位置:网站首页>对象深复制,面试题
对象深复制,面试题
2022-08-09 22:05:00 【勇敢*牛牛】
function cloneDeep(source,target){
if(!target){
switch(true){
case source instanceof Function:
var arr=source.toString().replace(/\n/g,"").match(/.*\((.*?)\)\s*\{(.*)\}/).slice(1);
target=new Function(arr[0],arr[1]);
break;
case source instanceof HTMLElement:
target=source.cloneNode(true);
break;
case source instanceof Array:
target=new source.constructor();
break
case source instanceof Date:
case source instanceof Set:
case source instanceof Map:
case Boolean(source.buffer):
target=new source.constructor(source);
break
case source instanceof RegExp:
target=new RegExp(source.source,source.flags);
break
default:
target={
};
}
}
// console.log(target)
// var names=[...Object.getOwnPropertyNames(source),...Object.getOwnPropertySymbols(source)];
var names=Reflect.ownKeys(source);
for(var i=0;i<names.length;i++){
var key=names[i];
if(key==="prototype"){
var con=target.prototype.constructor;
Object.defineProperties(target.prototype,Object.getOwnPropertyDescriptors(source.prototype));
Object.defineProperty(target.prototype,"constructor",{
value:con});
continue;
}
var desc=Object.getOwnPropertyDescriptor(source,key);
if(desc.value instanceof Object){
Object.defineProperty(target,key,{
enumerable:desc.enumerable,
configurable:desc.configurable,
writable:desc.writable,
value:cloneDeep(desc.value)
})
}else{
Object.defineProperty(target,key,desc);
}
}
return target;
}
var o1=cloneDeep(obj);
边栏推荐
猜你喜欢
随机推荐
【软考 系统架构设计师】案例分析⑤ 质量属性和架构评估
R语言ggplot2可视化:使用ggplot2可视化散点图、使用labs参数自定义Y轴的轴标签文本(customize Y axis labels)
Postgresql源码(68)virtualxid锁的原理和应用场景
【燃】是时候展现真正的实力了!一文看懂2022华为开发者大赛技术亮点
HUAWEI CLOUD escorts the whole process of "Wandering Ark" for the first time, creating a popular brand
Transfer Learning & Kemin Initialization
OFDM 十六讲 7 - Inter-Symbol-Interference
月薪5K的运维小白如何成为月薪5W的高级架构师?
Space not freed after TRUNCATE table
深度学习100例 —— 循环神经网络(RNN)实现股票预测
three.js镂空圆球拖拽变形js特效
xctf攻防世界 Web高手进阶区 shrine
阿里云架构师金云龙:基于云XR平台的视觉计算应用部署
Leetcode.25 K个一组翻转链表(模拟/递归)
重装系统后新建文本文档打不开怎么办
daemon
DXF笔记:文字对齐的研究
十步以内,用小程序快速生成App!
(转)字符集编码标识符,数字表示字符编码
CGLIB源码易懂解析