我认为我的问题很简单,但我找不到一个简单的解决方案。这是一个例子:
var obj1 = {
m1:"a",
m2:"b"
};
var obj2 = {
m:obj1
};
obj2.m.m1 = "c";
document.write(obj2.m.m1+"<br>"); //output: c
document.write(obj1.m1+"<br>"); // output: c ( I wanted to be a)
那么..从obj1.m1返回“a”需要做什么?
提前致谢
答案 0 :(得分:6)
您需要将obj2.m
设置为obj1
的克隆,而不是obj1
。例如:
function clone(obj) {
var result = {};
for (var key in obj) {
result[key] = obj[key];
}
return result;
}
var obj2 = {
m: clone(obj1)
};
obj2.m.m1 = "c"; // does not affect obj1.m1
答案 1 :(得分:4)
答案 2 :(得分:1)
obj1
和obj2.m
指向相同的对象。你不能拥有obj1.m1 != obj2.m.m1
您可以做的是将obj1
的副本分配给obj2.m
。请参阅链接Will posted。
答案 3 :(得分:0)
你需要先克隆它。
Object.prototype.clone = function() {
var newObj = (this instanceof Array) ? [] : {};
for (i in this) {
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object") {
newObj[i] = this[i].clone();
} else newObj[i] = this[i]
} return newObj;
};
var obj1={ m1:"a", m2:"b" };
var obj2={ m: {}};
obj2.m = obj1.clone();
obj2.m.m1="c";
document.write(obj2.m.m1+"<br>");
document.write(obj1.m1+"<br>");