1

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

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

所以我这样做是为了:

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。如果我将它设置为视图 ID(例如43),我希望它console.log仍然会返回{mapLayer: null},因为我创建了变量d来复制值this.model.get('layerIds')并使用该值独立于模型值。

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

{mapLayer: 43}

为什么是这样?如果其他变量之一发生更改,为什么 Javascript 变量会跟踪其复制的值并更新自己的值?

这怎么能阻止呢?

4

2 回答 2

1

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

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

maplayer属性 ond被设置时,引用也被操纵。基本上d并且this.model.get('layerIds')会从内存中返回相同的对象。

d.mapLayer = view.getId();

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

d === this.model.get('layerIds')// 真的

于 2013-08-06T09:21:17.187 回答
1

Javascript 通过引用与按值

“Javascript 总是按值传递,但是当变量引用对象(包括数组)时,“值”是对对象的引用。”

this.model.get('layerIds'); //  returns an object : {mapLayer: null}
于 2013-08-06T09:23:52.713 回答