Javascript 变量跟踪它们的副本?

标签 javascript variables

<分区>

我偶然发现了一件奇怪的事情。

我有一个模型类,您可以在其中通过 model.get(attributeName) 函数获取属性值。

所以我在 View 中这样做了:

var mapModel = new Ex.Models.MapModel(model);
var view = new Ex.Views.MapView(mapModel);

var d = this.model.get('layerIds');
d.mapLayer = view.getId();

console.log("layerIds", this.model.get('layerIds'));

属性 layerIds.mapLayer 默认设置为 null。如果我将它设置为 View ID(例如 43),我希望 console.log 仍会返回 {mapLayer: null}因为我创建了变量 d 来复制 this.model.get('layerIds') 的值并使用独立于模型值的值。

但是如果我执行这段代码,日志会显示:

{mapLayer: 43}

这是为什么?为什么 Javascript 变量会跟踪它们复制的值并在其他值发生变化时更新它们自己的值?

如何阻止这一切?

最佳答案

前一行中的 get 方法返回对模型中 layerIds 对象的引用:

var d = this.model.get('layerIds');

d 上的 mapplayer 属性被设置时,引用也会被操作。基本上 dthis.model.get('layerIds') 将从内存中返回相同的对象。

d.mapLayer = view.getId();

如果检查两者之间的相等性,您会发现它们是同一个对象。

d === this.model.get('layerIds')//true

关于Javascript 变量跟踪它们的副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18076125/

相关文章:

javascript - jquery slidetoggle() 不隐藏 :before element

javascript - 关于 d3.interpolate 对象的困惑

iphone - 如何定义一个可以在我的应用程序的任何地方访问的全局变量?

variables - 比较 Applescript 中的变量错误?

javascript - 有没有一种很好的简单方法来检查 Javascript 中的变量是否有值?

VB.NET 可变日期和时间

javascript - CoffeeScript - 理解 "@"

javascript - 按钮不调用脚本 - onclick 方法

javascript - 我需要验证我的日历,以便它只接受当前或 future 的日期?

ruby-on-rails - 在动态类型语言(例如 Ruby)中命名变量