javascript对象拷贝

浅拷贝


浅拷贝函数:

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

原文地址:https://www.cnblogs.com/wishyouhappy/p/3741222.html