浅拷贝
- 拷贝就是复制,就相当于把一个对象中的所有内容,复制一份给另一个对象
- 直接复制,或者说把一个对象的地址给了另一个对象,他们指向相同,两个对象之间有共同的属性或方法,都可以使用
function extend(a, b) {
for (var key in a) {
b[key] = a[key];
}
}
extend(obj0, obj1);
深拷贝
-
把一个对象中所有的属性或者方法,一个一个的找到,并且在另一个对象中开辟相应的空间,一个一个的存储到另一个对象中
-
例子:
function extend(a, b) { for(var key in a){ // 先获取a对象中每个属性的值 var item = a[key]; // 判断这个属性的值是不是数组 if(item instanceof Array) { // 如果是,在b对象中添加一个新的属性,并且这个属性值也是数组 b[key] = []; // 把a对象中这个数组的属性值一个一个的复制到b对象的这个数组属性中 extend(item,b[key]); } else if(item instanceof Object) { // 判断这个值是不是对象类型的 //如果是,在b对象中添加一个属性,是一个空对象 b[key] = {}; // 再次调用这个函数,把a对象中的属性对象的值一个一个的复制到b对象的这个属性对象中 extend(item,b[key]); } else { // 如果值是普通的数据,直接复制到b对象的这个属性中 b[key] = item; } } } extend(obj0,obj1);