浅拷贝和深拷贝的区分及实现

浅拷贝和深拷贝只针对object和array这样的复杂对象,一般浅拷贝只复制一层对象的属性,深拷贝则递归复制了所有的层级;

//浅拷贝函数 浅拷贝只是对对象地址进行了复制,并没有开辟新的栈,复制的结果就是两个对象指向同一个地址,即修改其中一个对象的属性
//则另一个对象的属性也会变化
var obj = {a: 1, arr: [1, 2, 3]};
var copyObj = copy(obj);
function copy(src) {
var dst = {};
for (var prop in src) {
if (src.hasOwnProperty(prop)) {
dst[prop] = src[prop];
}
}
return dst;
}
document.write(obj.arr);
//深拷贝
var china = {
nation: '中国',
birthplaces: ['北京', '上海', '广州'],
skincolr: 'yellow',
friends: ['sk', 'ls']
};
//深拷贝函数 深拷贝是开辟新的栈,两个对象对应不同的地址,修改一个对象的属性不会改变另一个对象的属性
function deepCopy(o, c) {
var c = c || {};
for (var i in o) {
if(typeof o[i]==='object'){
if(o[i].constructor===Array){
c[i]=[];
}else {
c[i]={};
}
deepCopy(o[i],c[i])
}else {
c[i]=o[i];
}
}
return c
}
var result = {name:'result'};
result = deepCopy(china,result);
console.dir(result)
posted @ 2017-10-30 14:00  johnny-cli  阅读(251)  评论(0编辑  收藏  举报