为什么拷贝的时候创建一个空对象就可以让父对象的一层属性拷贝到子对象?创建空对象的作用是什么?
题主的题意不是很清楚,我就把对象拷贝的过程整个说一下吧。
js中Object是引用类型值,所以如var o = {a:1}
,o
是{a:1}
的引用,源对象是放在堆中的;
考虑如下代码:
var o = {a:1}
console.log(o.a) //1
var oo = o
oo.a=2
console.log(o.a) //2
再看上面那句话,o
是{a:1}
的引用,oo
也是一样。所以o
和oo
只是拴在同一盒子上不同颜色的线,都连着{a:1}
而实际开发中,很多情况我们是不想o
和oo
存在这种联系的,即拿到一份o
的备份ooo
,他们相互独立,操作'ooo'不会对o
产生影响。
这就是对象拷贝的使用场景和作用
看如下代码:
const shallowCopy = (source) => {
let temp={};
// if (!source || typeof souce !== 'object') {
// return
// };
// source instanceof Array ? temp = [] : temp = {};
for (key in source) {
if (souce.hasOwnProperty(key)) {
temp[key] = souce[key]
}
}
return temp
}
上面代码注释掉的不用看,这是我原来学习的时候写的一个浅拷贝。大致思路就是做一个盒子把原来的'o'的值一个个拿出来装进去,然后新盒子和旧盒子就相互独立。
var o ={a:1}
console.log(o.a)
var ooo = shallowCopy(o) //1
ooo.a=2
console.log(ooo.a) //1
这样再操作ooo
就不会对o
造成影响
大概就这样
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答873 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
作用是形成一个新的对象引用,避免操作拷贝的对象属性时影响原对象的变化。