Подтвердить что ты не робот

Базовые настройки по умолчанию, на которые ссылаются при изменении свойств

У меня есть следующая модель:

var Soq = Backbone.model.extend({
    default:{
        'name': 'something'
        , 'parents': []       //array will be passed by reference to attributes hash on new object instantiation
    } 
});

Я новичок в javascript и позвоночнике, но, глядя на источник, я думаю, что может произойти то, что когда атрибуты этой модели устанавливаются по умолчанию (backbone.js: 137), а значением по умолчанию является объект, это делается Справка. Это означает, что когда я делаю что-то вроде этого:

var soq = new Soq;
var parents = soq.get('parents');
parents.push('parent');               //changes defaults of the proto object

var soq2 = new Soq;
console.log(soq2.get('parents'););  //will output ['parent']
console.log(soq2.defaults.parents); //will output ['parent']

Я правильно понимаю это, и если да, то какой лучший способ установить значения по умолчанию, которые являются объектами, не изменяя их в любое время, когда будущий экземпляр ссылается на них?

Сообщите мне, если я не понимаю или что-то не понимаю. Заранее благодарим за ваше время.

4b9b3361

Ответ 1

Свойство "родители" будет одинаковым для каждого экземпляра, потому что оно установлено на прототипе. Другими словами, один и тот же объект будет использоваться для установки модели при ее построении, поэтому вы получите ту же ссылку на массив.

Вместо этого вы хотите создать новый объект по умолчанию каждый раз, когда будет построена новая модель. Backbone позволяет вам определять свои значения по умолчанию как функцию:

defaults: function() { 
    return {
        name: 'something', 
        parents: [] 
    }; 
}