JS对象引用、浅层拷贝与深层拷贝


JS对象引用、浅层拷贝与深层拷贝

  • 使用JSON.parse()与JSON.stringify()对简单对象进行深层拷贝
1
2
3
var clone = function (obj) {
return JSON.parse(JSON.stringify(obj));
}
  • 对象深拷贝方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var clone = function (obj) { 
if(obj === null) return null
if(typeof obj !== 'object') return obj;
if(obj.constructor===Date) return new Date(obj);
if(obj.constructor === RegExp) return new RegExp(obj);
var newObj = new obj.constructor (); //保持继承链
for (var key in obj) {
if (obj.hasOwnProperty(key)) { //不遍历其原型链上的属性
var val = obj[key];
newObj[key] = typeof val === 'object' ? arguments.callee(val) : val; // 使用arguments.callee解除与函数名的耦合
}
}
return newObj;
};