指对象的复制。
浅拷贝
复制对象,区别深拷贝的是,被拷贝对象中如果有值类型,那么拷贝的对象和被拷贝对象是共用存储空间的。也就是指向同一引用,所以导致,如果拷贝对象改变引用,被拷贝的对象也会被同时改变(虽然不是主动改变)
function extendCopy(p) {
var c = {};
for (i in p) {
c[i] = p[i];
}
c.uber = p;
return c;
}
//uber可以看做是对象属性
var Chinese = {
nation: "中国"
}
var Doctor = extendCopy(Chinese);
Doctor.career = "医生";
// 这样Doctor就继承了Chinese的属性
但是这样就出现上面所说的问题:
Chinese.birthPlaces = ['北京','上海','香港'];
var Doctor = extendCopy(Chinese);
Doctor.birthPlaces.push('广州');
console.log(Chinese.birthPlaces);
通过上面例子可以看到,Doctor本来想自己增加一个元素,但是其拷贝对象也被改变了。
这时就需要深拷贝:
深拷贝
function deepCopy(p,c) {
var c = c || {};
for (var i in p) {
//typeof返回的是字符串
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
}
参考自 http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance_continued.html