這實際上是不Backbone.js的的問題。
spinnerToggleFunctions: {}, //function() { return {} },
tmpI: 0,
tmpO: {
t: 0
},
tmpA: [0]
你可能想知道這一點,但tmpI,tmpO and tmpA
上面從樣本代碼是將通過原從它的實例訪問基本視點的屬性。
,當你
this.tmpI = 1;
this.tmpO.t = 1;
this.tmpA[0] = 1;
你在this.tmpI
製作實例新屬性所以現在的實例都有自己的屬性命名tmpI
這意味着它沒有檢查是否__proto__
有一個叫做財產tmpI
但是您撥打this.tmpO.t = 1;
和this.tmpA[0] = 1
的位置不會創建實例的屬性,而是直接更改__proto__
的屬性。
這一切都因爲你不能創建數組或對象之前數組或對象成員是defined.to避免這種情況,
this.tmpI = "";
this.tmpO = {};
this.tmpA = [];
this.tmpI = 1;
this.tmpO.t = 1;
this.tmpA[0] = 1;
你現在正在創建和更改實例properties.prototype財產永遠不會改變。
init::BaseView
(index):46 *** I: 0 O: 0 A: 0
(index):59 *** I: 1 O: 1 A: 1
(index):33 init::BaseView
(index):46 *** I: 0 O: 0 A: 0
(index):59 *** I: 1 O: 1 A: 1
ofc一旦刪除實例屬性,@ tmpI,tmpO,tmpA就會再次指向原型屬性。
preRender: function() {
console.log('*** I: %o O: %o A: %o', this.tmpI, this.tmpO.t, this.tmpA[0]);
this.tmpI = "";
this.tmpO = {};
this.tmpA = [];
this.tmpI = 1;
this.tmpO.t = 1;
this.tmpA[0] = 1;
delete this.tmpO;
delete this.tmpA;
delete this.tmpI;
console.log('deleted instance propeties so these are prototype properties. I: %o O: %o A: %o', this.tmpI, this.tmpO.t, this.tmpA[0]);
},