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

发布于 2024-10-21 08:13:29 字数 338 浏览 4 评论 0原文

我在编写 JavaScript 时注意到了这种行为,但我一直无法找出原因:

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

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

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

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

我不太确定发生了什么事。如何修复代码,使其警报 1 而不是 2(假设 o1 没有更改)?

非常感谢。

I've noticed this behavior when writing my JavaScript, and I haven't been able to figure out why:

Below is some code to reproduce the behavior in question.

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

Expected Result: The browser alerts 1, because I only changed a property of the o2 object, not the o1 object.

Actual Result: The browser alerts 2, because it seems o1 is equal to o2.

I'm not really sure what's going on. How can I fix the code so it alerts 1 rather that 2 (assuming that o1 hasn't changed)?

Much thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

就像说晚安 2024-10-28 08:13:29

因为两个变量引用同一个对象。变量分配时不会克隆/复制对象。 您必须自己执行此操作

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

Because both variables reference the same object. Objects are not cloned/copied on variable assignment. You would have to do this yourself.

JavaScript behaves the same way like any (most) other OO languages in this case.

沉溺在你眼里的海 2024-10-28 08:13:29

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

By writing var o2 = o1; you're making o1 and o2 two references to the same object. What you want to do is to clone the o1 object and to store the cloned copy in o2. Search for cloning objects in JavaScript.

女中豪杰 2024-10-28 08:13:29

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

Because you are setting the objects to the same reference point. You need to clone the object. here is a piece of code from http://www.thespanner.co.uk/2008/04/10/javascript-cloning-objects/ that allows for cloning of objects with prototyping.

Object.prototype.clone = function() {
  return eval(uneval(this));
}
alert("test".clone());
alert((3).clone());
alert(clone.clone());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文