最近看别人家自己封装的框架,看到了使用了 $.extend(true,obj,obj.....);
,当时候没看明白,后来网上查了一下,这个与深拷贝与浅拷贝有关的
1.我们看下jquery的使用方法;
var obj1 = {
apple: 0,
banana: {weight: 52, price: 100},
cherry: 97
};
var obj2 = {
banana: {price: 200},
durian: 100
};
var obj=$.extend(true,{},object1,object2);
console.log(obj);
解释:有true就是深拷贝,没true就是浅拷贝;
上面的代码还是很容易看明白的啦,在这里不做太多讲解;接下来我们将自己封装的深拷贝函数与浅拷贝函数;
深拷贝函数:
function copy(object1,object2){
var obj={};
//由于js函数对象是引用关系,所以要重新构造一个obj;
for(var k in object1){
obj[k]=object1[k];
}
for(var k in object2){
//如果obj2的键值对在obj中不存在,那么我们把它放到obj中去
if(!obj[k] || typeof obj[k] != "object"){
obj[k]=object2[k];
continue;
}
if(typeof obj[k] == "object"){
obj[k]=copy(obj[k],object2[k]);
}
}
//返回一个对象
return obj;
}