さて、私は最近これに遭遇しました、そして私はそれがなぜ起こっているのか完全に理解することができません。なぜthis._views
「他家受粉」するのか、誰かが説明できますか?次のようにコーディングします。
var layout = Backbone.View.extend({
_views: [],
addToViews: function(view) {
this._views.push(view);
},
renderViews: function() {
console.log(this._views);
}
});
var view1 = new layout();
view1.addToViews('some view');
view1.renderViews(); //outputs array(1)['some view']
var view2 = new layout();
view2.renderViews(); //outputs array(1)['some view'] **incorrect!**
これは正常に機能します。
var layout = Backbone.View.extend({
//_views: [],
addToViews: function(view) {
this._views = this._views || [];
this._views.push(view);
},
renderViews: function() {
console.log(this._views);
}
});
var view1 = new layout();
view1.addToViews('some view');
view1.renderViews(); //outputs array(1)['some view']
var view2 = new layout();
view2.renderViews(); //outputs undefined **correct**
プレーンなバニラjsの実装も正しく機能しているようです
var layout = function() {
var _views = [];
return {
addToViews: function(view) {
_views.push(view);
},
renderViews: function() {
console.log(_views);
}
}
};
var view1 = new layout();
view1.addToViews('some view');
view1.renderViews(); //outputs array(1)['some view']
var view2 = new layout();
view2.renderViews(); //outputs array(0)[]
this._views
では、新しいインスタンスを作成するときに、なぜ保存状態になるのでしょうか。