拷贝的时候创建空对象的作用

为什么拷贝的时候创建一个空对象就可以让父对象的一层属性拷贝到子对象?创建空对象的作用是什么?

阅读 3.4k
4 个回答

作用是形成一个新的对象引用,避免操作拷贝的对象属性时影响原对象的变化。

题主的题意不是很清楚,我就把对象拷贝的过程整个说一下吧。

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也是一样。所以ooo只是拴在同一盒子上不同颜色的线,都连着{a:1}

而实际开发中,很多情况我们是不想ooo存在这种联系的,即拿到一份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造成影响

大概就这样

创建空对象,进行拷贝,是为了避免影响 源对象 ,包括 源对象 中的所有子对象。

新手上路,请多包涵

拷贝时仅仅创建一个新对象是不够的,还要遍历原对象的属性后,在新对象中建立同样的键值对。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题