首页 存档 技术 查看内容

js对象浅拷贝和深拷贝 1、浅拷贝 2、深拷贝 拓展

2018-3-30 13:00 |来自: 互联网 318 0

摘要: 1、浅拷贝 拷贝就是把父对象的属性,全部拷贝给子对象。接下来,我们看一个拷贝的例子: function extendCopy(b) { var a = {}; for (var i in b) { a = b; } return a; } 调用的时候,这样写: // 调用var copyA = ...

1、浅拷贝

拷贝就是把父对象的属性,全部拷贝给子对象。
接下来,我们看一个拷贝的例子:

function extendCopy(b) { 
var a = {};
for (var i in b) { a[i] = b[i]; }
return a; }

调用的时候,这样写:

// 调用
var copyA = { titleA: '标题A'
};
var copyB = extendCopy(copyA);
console.log(copyB.titleA); // 标题A

但是,这样的拷贝有一个问题。那就是,如果父对象的属性等于数组或另一个对象,那么实际上,子对象获得的只是一个内存地址,而不是真正拷贝,因此存在父对象被篡改的可能。

接下来,我们看一个篡改的示例:

function extendCopy(b) { 
var a = {};
for (var i in b) { a[i] = b[i]; }
return a; }
// 调用
var copyA = { arrayA: [1, 2, 3, 4] };
var copyB = extendCopy(copyA); copyB.arrayA.push(5);
console.log(copyA.arrayA); // [1, 2, 3, 4, 5]

结果是增加了一个5。

所以,extendCopy() 只是拷贝了基本类型的数据,我们把这种拷贝叫做“浅拷贝”。

2、深拷贝

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部