我在编写JavaScript时注意到了这种行为,我无法弄清楚原因:
以下是一些重现相关行为的代码。
var o1 = { num: 1 } var o2 = o1; o2.num = 2; alert(o1.num);
预期结果:浏览器提醒1,因为我只更改了 o2 对象的属性,而不是 o1 对象。
实际结果:浏览器提醒2,因为似乎 o1 等于 o2 。
我不确定发生了什么。如何修复代码,使其提醒1而不是2(假设 o1 未更改)?
提前非常感谢。
答案 0 :(得分:5)
因为两个变量引用 相同的对象。不在变量赋值上克隆/复制对象。 You would have to do this yourself
在这种情况下,JavaScript的行为与任何(大多数)其他OO语言相同。
答案 1 :(得分:3)
通过撰写var o2 = o1;
,您正在对{strong>同一个对象进行o1
和o2
两次引用。您要做的是克隆 o1
对象,并将克隆的副本存储在o2
中。在JavaScript中搜索克隆对象。
答案 2 :(得分:2)
因为您要将对象设置为相同的参考点。您需要克隆该对象。这是来自http://www.thespanner.co.uk/2008/04/10/javascript-cloning-objects/的一段代码,允许使用原型进行克隆对象。
Object.prototype.clone = function() {
return eval(uneval(this));
}
alert("test".clone());
alert((3).clone());
alert(clone.clone());