在JavaScript中,存储对象都是存储的对象的地址,浅拷贝(复制)会导致复制的多个对象指向内存同一块地址。
相当于C#中的引用类型对象。
function Person()
{
this.name = name;
}
var p = new Person();
p.name = "123";
p2.name = "test";
alert(p.name); 结果是test
而深拷贝是在内存开辟一块新的地址,是连个不同的对象。
这里使用json转换来实现对象的深拷贝。
//利用json实现对象的深拷贝
function deepCopy(oldValue) {
var newJson = JSON.stringify(oldValue)
return JSON.parse(newJson)
}
//使用原型扩展类的方法
Person.prototype.Clone = function () {
var newJson = JSON.stringify(this);
return JSON.parse(newJson);
}
var p = new Person();
p.name = "123";
var p2 = p.Clone();
//var p2 = deepCopy(p);
p2.name = "test";
alert(p.name); //结果是123 不影响p对象的值