Javascript 主干删除和新建视图不会重置其属性数组内容
我对主干网有以下两个属性的看法:Javascript 主干删除和新建视图不会重置其属性数组内容,javascript,arrays,backbone.js,javascript-objects,backbone-views,Javascript,Arrays,Backbone.js,Javascript Objects,Backbone Views,我对主干网有以下两个属性的看法: var MyBasketView = Backbone.View.extend({ _totalCost: 0, _devices: [], 在初始化时,我在localStorage中通过一个包含多个设备的数组,将它们推送到_devices数组中,并将它们的总成本加起来,如下所示 var self = this; _.each(this._cartItems, function(cartItem) { self._totalCost
var MyBasketView = Backbone.View.extend({
_totalCost: 0,
_devices: [],
在初始化时,我在localStorage中通过一个包含多个设备的数组,将它们推送到_devices数组中,并将它们的总成本加起来,如下所示
var self = this;
_.each(this._cartItems, function(cartItem) {
self._totalCost += cartItem.item.cost;
self._devices.push(cartItem.item);
}
在我的路由器中,当我离开这个页面时,我会删除这个视图,当我回来时,我会再次创建这个视图。问题是,当我在initialize函数中打印属性时,总成本为0,并且设备数组仍然具有以前的设备
当我删除视图或使用新的MyBasketView()创建视图时,是否应该重置它
我当然可以在初始化中清除它,但我想了解为什么会发生这种情况,以及其他对象是否也会发生这种情况?解释与(精细打印)基本相同: 记住,在JavaScript中,对象是通过引用传递的,所以如果 如果包含一个对象作为默认值,它将在所有用户之间共享 实例 创建视图的新实例时,会复制值,包括将指向同一数组引用的
\u设备
:
var v1 = new MyBasketView();
var v2 = new MyBasketView();
v1._devices === v2._devices // true
该数组的内容在MyBasketView
原型的整个生命周期内都会保留(即使实例被销毁)
最简单的修复方法是在initialize
函数中指定变量:
var MyBasketView = Backbone.View.extend({
_totalCost: 0,
initialize: function() {
this._devices = [];
}
});
主干网似乎就是这样工作的。您传递的对象不是深度克隆对象。在
initialize
中设置非常量变量可能是更好的做法
请参阅:感谢您的快速回复。在模型文档中没有注意到这一点,因为我正在查看视图文档。这是有道理的,但这不是我在创建新对象时所期望的。