码迷,mamicode.com
首页 > 其他好文 > 详细

手写深拷贝

时间:2020-03-01 21:44:11      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:reg   else   console   hash   cal   value   str   返回值   res   

function isObject(obj) {
return Object.prototype.toString.call(obj) === ‘[object Object]‘
}
function deepCopy(source,hash = new WeakMap()){
// 判断如果参数不是一个对象,返回改参数
if(!isObject(source)) return source;
if(hash.has(source)) return hash.get(source); // 如何拷贝过该对象,则直接返回该对象
// 判断参数是对象还是数组来初始化返回值
let res = Array.isArray(source)?[]:{};
hash.set(source,res); // 哈希表添加新对象
// 循环参数对象的key
for(let key in source){
// 如果该key属于参数对象本身
if(Object.prototype.hasOwnProperty.call(source,key)){
// 如果该key的value值是对象,递归调用深拷贝方法进行拷贝
if(isObject(source[key])){
res[key] = deepCopy(source[key],hash);
}else{
// 如果该key的value值不是对象,则把参数对象key的value值赋给返回值的key
res[key] = source[key];
}
}
}
// 返回返回值
return res;
};
var obj3 = {
name:‘obj.name‘,
un:undefined,
nu:null,
sy:Symbol(123),
say:function(){
console.log(this.name);
},
reg:/\d{6}/g,
date:new Date(),
child:{
name:‘child.name‘
}
}
var obj2=deepCopy(obj3)
console.log(obj2)

手写深拷贝

标签:reg   else   console   hash   cal   value   str   返回值   res   

原文地址:https://www.cnblogs.com/missguolf/p/12392173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!