JavaScript:将对象存储为固定值?

时间:2011-03-12 23:16:57

标签: javascript variables object

我在编写JavaScript时注意到了这种行为,我无法弄清楚原因:

以下是一些重现相关行为的代码。

var o1 = {
  num: 1
}
var o2 = o1;
o2.num = 2;
alert(o1.num);

预期结果:浏览器提醒1,因为我只更改了 o2 对象的属性,而不是 o1 对象。

实际结果:浏览器提醒2,因为似乎 o1 等于 o2

我不确定发生了什么。如何修复代码,使其提醒1而不是2(假设 o1 未更改)?

提前非常感谢。

3 个答案:

答案 0 :(得分:5)

因为两个变量引用 相同的对象。不在变量赋值上克隆/复制对象。 You would have to do this yourself

在这种情况下,JavaScript的行为与任何(大多数)其他OO语言相同。

答案 1 :(得分:3)

通过撰写var o2 = o1;,您正在对{strong>同一个对象进行o1o2两次引用。您要做的是克隆 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());