手写浅拷贝封装
//浅拷贝
// 浅拷贝比较容易实现,注意一下细节就好了
//遍历对象,然后把属性和属性值都放在一个新的对象不就好了~
function shallowCopy(obj) {
//1.只针对对象来进行遍历
if (typeof obj !== 'object') return;
//2.新建一个对象或者数组
//instanceof查找构造函数中的原型是否在对象中的原型链上
var newObj = obj instanceof Array ? [] : {}
//遍历 并且判断是obj的属性才拷贝
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = obj[key];
}
}
return newObj;
}
手写深拷贝封装
//深拷贝
//一层的时候是深拷贝,多层嵌套就变成浅拷贝
//所以使用递归逐层添加到新对象中
//拷贝的时候判断一下属性值的类型,如果是对象,我们递归调用深拷贝函数
function deepCopy(obj) {
//1.我们需要的是对象
if (typeof obj !== 'object') return;
//2.新建一个对象或者数组
//instanceof查找构造函数中的原型是否在对象中的原型链上
var newObj = obj instanceof Array ? [] : {};
//遍历,并且判断是否是obj中的属性
//判断一下属性值的类型,如果是对象,我们递归调用深拷贝函数
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = typeof obj[key] == 'object' ? deepCopy(obj[key]) : obj[key];
}
}
}
}