浅拷贝和深拷贝

原创 molongv 随笔 JS 211阅读 2017-11-15 14:38:51 举报

简单描述:浅拷贝,就是简单的值传递。a值传给b,b值变动时,a值会被影响,这就是浅拷贝;深拷贝则反之,达到了真正意义上的拷贝。b值被改动,不影响a值。
//浅拷贝
html 代码

//深拷贝:
function inCopy(obj1,obj2) {
var obj1 = obj1 || {};//容错处理
for (var k in obj2) {
if(obj2.hasOwnProperty(k)){ //只拷贝实例属性,不进行原型的拷贝
if(typeof obj2[k] == 'object') { //引用类型的数据单独处理
obj1[k] = Array.isArray(obj2[k])?[]:{};
inCopy(obj1[k],obj2[k]); //递归处理引用类型数据
}else{
obj1[k] = obj2[k]; //值类型的数据直接进行拷贝
}
}
}
}

var obj3 = {
name : 'Awen',
song : {
auther : '小明',
title : '广州'
},
hobby : ['吃','吃吃','吃吃吃']
};
var obj4 = {};

inCopy(obj4,obj3);
console.log(obj3); //Object {name: "Awen", song: Object, hobby: Array[3]}
console.log(obj4); //Object {name: "Awen", song: Object, hobby: Array[3]}
obj4.hobby.pop();
console.log(obj3); //Object {name: "Awen", song: Object, hobby: Array[3]}
console.log(obj4); //Object {name: "Awen", song: Object, hobby: Array[2]}
obj4.song.title = '北京';
console.log(obj3);
console.log(obj4);

温馨提提示:JSON的解析以及反解析,就能得到深拷贝对象。

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复