我伸出骨干的观点一样:骨干观的继承共享属性
var baseView = Backbone.View.extend({
fruits : [],
listFruits : function() {
console.log(this.fruits);
}
});
var firstView = baseView.extend({
initialize : function() {
this.fruits.push("apple");
}
});
var secondView = baseView.extend({
initialize : function() {
this.fruits.push("pear");
}
});
var firstViewInstance = new firstView(); // ["apple", "pear"]
var secondViewInstance = new secondView(); // ["apple", "pear"]
firstViewInstance.listFruits();
secondViewInstance.listFruits();
在我看来,firstViewInstance
和secondViewInstance
应该是完全独立的,但它们有明显的关联。我怎样才能实现两个独立的视图对象,都从一个共同的基础继承,但不是共享数据?
编辑: 基于下面的答案我有一个更新的小提琴在http://jsfiddle.net/qZ7SU/似乎解决这个问题。我仍然不完全清楚发生了什么,但我认为明确附加fruits[]
到this
,将其创建为实例变量,而不是将其附加到原型。
你这里的问题是,'[]'是一个数组,因此一个对象,所以是独一无二的原型和所有的意见都维护着一个相同。一个简单的解决方案,但涉及大量的样板将在初始化函数中添加this.fruits = []。另一个可能是重写baseView的构造函数。我会解释那部分是你感兴趣的。我会尝试去想另一个解决方案。 – Loamhoof