骨幹

2013-05-30 180 views
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 !!!!!! 

...骨幹

爲什麼視野中的其他附加變量?我認爲它會每次只是我0 newTestView

回答

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"); 
    } 
}); 
+0

相當不錯,我真的很感謝你的回答! – Liber

+0

但我在Chrome中控制視圖,'option'屬性不放置在__proto__屬性中,它只是在那裏。 – Liber

+0

@Liber:你看錯了地方:http://jsfiddle.net/ambiguous/T24Rz/ –