Я бил головой об этом в течение последних двух дней. По какой-то причине основой являются данные родительского экземпляра через унаследованные дочерние модели. Вот пример:Backbone.js: Наследование модели вызывает общие данные
var Base = Backbone.Model.extend({
index : []
});
var Group = Base.extend({
initialize : function() {
this.index.push('from group');
}
});
var User = Base.extend({
initialize : function() {
this.index.push('from user');
}
});
var user = new User();
console.log(user.index); // ['from user']
var group = new Group();
console.log(group.index) // ['from user', 'from group']
Что я ищу это:
console.log(user.index); // ['from user']
console.log(group.index) // ['from group']
Любые идеи?
Спасибо! Мэтт
Спасибо за ваш ответ. Я действительно надеялся, что 'extend()' будет избегать этой проблемы путем клонирования объектов/массивов. Похоже, что эту практику определения массивов и объектов в родительском классе следует избегать, поскольку это может привести к непреднамеренным последствиям. – Matt
Есть причины для определения объектов или массивов в классах, подобных этому, но вы намерены использовать индекс в качестве переменной экземпляра, чтобы он был уникальным для каждого экземпляра, а не общим для всех экземпляров, таких как переменные класса. Если вы хотите переменные экземпляра, то да, вы не должны определять их в объекте, переданном для расширения, но если вы хотите переменную класса, то да, это прекрасно. Совершенно точно определить переменные экземпляра в конструкторе родителя, как показал Skylar. – chubbsondubs