1
var TestView = Backbone.View.extend({

  options: {
    "theList": []
  },

  initialize: function() {
    console.log(this.options.theList.length);
    this.options.theList.push("xxx");
  }

});

// other place:

var view1 = new TestView();
// the console result will be 0

var view2 = new TestView();
// the console result will be 1 !!!

var view3 = new TestView();
// the console result will be 2 !!!!!!

...

为什么?我认为每次我都会控制台new0 TestView

4

1 回答 1

2

调用中的所有内容都extend将附加到视图的原型。这意味着每次您执行以下操作时,您options的所有实例都将共享您:TestView

this.options.theList.push("xxx");

您将字符串推送到所有实例通过原型共享/引用的完全相同的数组上。

如果要options为每个实例单独设置,请在视图的构造函数中进行设置:

var TestView = Backbone.View.extend({
  initialize: function() {
    this.options.theList = [ ];
    console.log(this.options.theList.length);
    this.options.theList.push("xxx");
  }
});
于 2013-05-30T02:00:00.703 回答