一、克隆(拷贝)
1、浅拷贝
拷贝就是复制,就相当于把一个对象中的所有内容,复制一份给另一个对象(直接复制)。或者说就是把一个对象的地址给了另一个对象,他们指向相同,两个对象之间有共同的属性或者方法,都可以使用
var obj = { name: "abc", age: 123, card: ["visa", "master"], wife: { name: "bcd", son: { name: "aaa", } } } var obj1 = {}; function clone(target, origin) { for (var prop in origin) { target[prop] = origin[prop]; } } clone(obj1,obj);
console.log(obj);
console.log(obj1);
打印结果如下:
这里主要区分原始值和引用值的拷贝,原始值的拷贝,拷贝的是整个原始值,而引用值的拷贝,拷贝的是地址,如果是浅拷贝,一旦obj对象中含有引用值。拷贝之后,如果对obj1进行改变,则obj的值也会发生改变。
2、深拷贝
把一个对象中所有的属性或者方法,依次找到,并且在另一个对象中开辟相应的空间,依次的存储到另一个对象中,这句话可能不太好理解。简单点说,深拷贝之后,两个对象之间有共同的属性或者方法,但是它们各自指向各自空间(指向不同)。如果是深拷贝,一旦obj对象中含有引用值,拷贝之后,如果对obj1进行改变,则obj的值不会进行改变。