对extend 浅拷贝进行简化
var extend = function (obj,newObj) {
for(var key in newObj){
obj[key] = newObj[key];
}
return obj;
}
//从对象的角度测试
var obj = {
a:1,
b:2,
c:{
d:3
}
};
var newObj = {
};
console.log(extend(newObj,obj));
//对 newObj.a = 3;进行赋值
//打印 obj.a 得到1
//打印 newObj.a 得到3 这说明obj.a 与 newObj.a 不存在引用关系 拷贝成功
//在深一层
//对 newObj.c.d = 5;进行赋值
//打印 obj.c.d 得到5
//打印 newObj.c.d 得到5 这说明obj.c.d 与 newObj.c.d 存在引用关系 拷贝失败 在深一层就不行了 所以为浅拷贝
//从数组的角度测试
var obj = {
a:1,
b:2,
c:[1,2,3]
};
var newObj = {
c:[3]
};
console.log(extend(newObj,obj));
//打印 newObj.c 得到 [1,2,3]
//给newObj.c[0] = 2;赋值
//打印obj.c[0] 得到 2 综上证明 obj.c 与 newObj.c存在引用关系 这也证明了浅拷贝
对extend shen拷贝进行简化
var extend = function (obj,newObj) {
for(var key in newObj){
if(Object.prototype.toString.call(newObj[key]) == '[object Array]' || Object.prototype.toString.call(newObj[key]) == '[object Object]'){
extend(obj[key],newObj[key])
}else{
obj[key] = newObj[key];
}
}
return obj;
}
//从对象的角度测试
var obj = {
a:1,
b:2,
c:{
d:5
}
};
var newObj = {
c:{
d:6
}
};
console.log(extend(newObj,obj));
//对 newObj.a = 3;进行赋值
//打印 obj.a 得到1
//打印 newObj.a 得到3 这说明obj.a 与 newObj.a 不存在引用关系 拷贝成功
//在深一层
//对 newObj.c.d = 7;进行赋值
//打印 obj.c.d 得到5
//打印 newObj.c.d 得到7 这说明obj.c.d 与 newObj.c.d 不存在引用关系 拷贝成功 故证明深拷贝
//从数组的角度测试
var obj = {
a:1,
b:2,
c:[3]
};
var newObj = {
c:[1,2,3]
};
console.log(extend(newObj,obj));
//打印 newObj.c 得到 [1,2,3]
//给newObj.c[0] = 2;赋值
//打印obj.c[0] 得到 3 综上证明 obj.c 与 newObj.c 不存在引用关系 这也证明了深拷贝