我有一个模型类,您可以通过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')
{1}}并使用该值独立于模型值。
但如果我执行这段代码,日志会说:
{mapLayer: 43}
这是为什么?为什么Javascript变量会跟踪其复制的值并在其他一个更改后更新自己的值?
怎么能阻止它?
答案 0 :(得分:1)
前一行中的get
方法返回对模型中layerIds
对象的引用:
var d = this.model.get('layerIds');
当设置maplayer
上的d
属性时,也会操纵引用。基本上d
和this.model.get('layerIds')
将从内存中返回相同的对象。
d.mapLayer = view.getId();
如果你检查了两者之间的相等,你会发现它们是同一个对象。
d === this.model.get('layerIds')
// true
答案 1 :(得分:1)
来自Javascript by reference vs. by value:
“Javascript总是按值传递,但是当变量引用对象(包括数组)时,”value“是对象的引用。”
this.model.get('layerIds'); // returns an object : {mapLayer: null}