【问题标题】:JavaScript: Store Object as Fixed Value?JavaScript:将对象存储为固定值?
【发布时间】:2011-07-14 06:17:17
【问题描述】:

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

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

变量 o1 = { 数量:1 } var o2 = o1; o2.num = 2; 警报(o1.num);

预期结果:浏览器提示1,因为我只更改了o2对象的一个​​属性,没有更改o1对象。

实际结果:浏览器提示2,因为看起来o1等于o2

我不太确定发生了什么。我怎样才能修复代码,以便它提醒 1 而不是 2(假设 o1 没有改变)?

非常感谢。

【问题讨论】:

  • “o2”成为“o1”的引用

标签: javascript variables object


【解决方案1】:

因为您将对象设置为相同的参考点。您需要克隆该对象。这是来自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());

【讨论】:

  • 请记住 uneval() 仅在 Firefox 上可用。据我所知,它不适用于 IE、Chrome 和 Safari。
【解决方案2】:

因为这两个变量引用 同一个对象。对象不会在变量赋值时被克隆/复制。 You would have to do this yourself.

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

【讨论】:

    【解决方案3】:

    通过编写var o2 = o1;,您将o1o2 设为同一个对象的两个引用。您要做的是克隆 o1 对象并将克隆的副本 存储在o2 中。在 JavaScript 中搜索克隆对象。

    【讨论】:

      猜你喜欢
      • 2012-05-21
      • 2016-07-03
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 1970-01-01
      相关资源
      最近更新 更多