對JavaScript/BackboneJS的工作原理感到困惑。讓我們看看下面的例子:BackboneJS中的意外構造函數/擴展行爲
window.MyView = Backbone.View.extend({
index: 0,
list: [],
initialize: function() {
console.log("Initializing MyView");
console.log("this.index = " + this.index);
console.log("this.list = [" + this.list.join(',') + "]");
this.index++;
this.list.push(this.index);
}
});
var first = new MyView(),
second = new MyView();
我期待在這裏的是,新的MyView的()將創建window.MyView的「類」全新副本,所以outbut是:
Initializing MyView
this.index = 0
this.list = []
Initializing MyView
this.index = 0
this.list = []
而是我有
Initializing MyView
this.index = 0
this.list = []
Initializing MyView
this.index = 0
this.list = [1] // Very unexpected!
混亂的部分是整型變量「指標」,其實0作爲預期,但陣「清單」已經包含了從以前的初始化值。這是怎麼回事?
演示http://jsfiddle.net/fqZTp/3/
我不知道骨幹,但似乎'list' /'index'是放在原型中,所以它們在兩種情況下都指向相同的價值。在每個實例的基礎上對它們進行初始化設置:http://jsfiddle.net/fqZTp/4/。不過,我不確定這是否是答案。 – pimvdb 2012-03-09 12:43:19
這確實是答案。請參閱http://documentcloud.github.com/backbone/docs/backbone.html#section-149以獲取其擴展函數的實現細節。 – TheShellfishMeme 2012-03-09 13:02:42