今天又进一步认识到对象的赋值的原理,以前看对象赋值的时候知道是引用,但是实际用的时候还是简单的"= "进行赋值,结果出现的问题就是改变一个对象,另外一个对象也直接改变,原理肯定也是知道了,由于两个对象都是指向的同一个对象;
想要真正变成两个独立的对象,就需要有各自的指向,然后就找到了深拷贝,
function deepCopy(target) {
if (typeof target !== "object") return;
//判断目标类型,来创建返回值
var newObj = target instanceof Array ? [] : {};
for (var item in target) {
//只复制元素自身的属性,不复制原型链上的
if (target.hasOwnProperty(item)) {
newObj[item] =
typeof target[item] == "object" ? deepCopy(target[item]) : target[item]; //判断属性值类型
}
}
return newObj;
}
网友评论