浅拷贝
浅拷贝函数:
function copy(p){
var c = {};
for (var i in p){
c[i] = p[i];
}
c.uber = p;
return c;
}
测试:
var People = {
nation:'中国'
};
People.birthPlaces = ['北京','上海','香港']; var Teacher = copy(People);
Teacher.birthPlaces.push('厦门');
console.log(Teacher.birthPlaces);
console.log(People.birthPlaces);
console.log(Teacher.nation);
console.log(People.nation);
结果:
["北京", "上海", "香港", "厦门"]
["北京", "上海", "香港", "厦门"] //People的birthPlaces变了
中国
中国
深拷贝
深拷贝函数:
//深拷贝(递归调用浅拷贝)
function deepCopy(p, c) {
var c = c || {};
for (var i in p) {
if (typeof p[i] === 'object') {
c[i] = (p[i].constructor === Array) ? [] : {};
deepCopy(p[i], c[i]);
} else {
c[i] = p[i];
}
}
return c;
}
测试:
var People = {
nation:'中国'
};
People.birthPlaces = ['北京','上海','香港']; var Teacher = deepCopy(People);
Teacher.birthPlaces.push('厦门');
console.log(Teacher.birthPlaces);
console.log(People.birthPlaces);
console.log(Teacher.nation);
console.log(People.nation);
结果:
["北京", "上海", "香港", "厦门"] VM211:22
["北京", "上海", "香港"] VM211:23
中国 VM211:24
中国
参考:http://www.ruanyifeng.com/blog