对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