Я пытаюсь создать шаблон строителя в JavaScript. Но мне интересно, почему, если я позвоню Object.create
, то дважды я получил тот же список, что и раньше.Почему Object.create не создает для меня новый список?
Вот мой код.
var filterBuilder = {
filters: [],
addFilter: function(options) {
var filter = {
'type': 'selector',
'dimension': options.dimension,
'value': options.value
}
this.filters.push(filter);
return this;
},
build: function() {
return this.filters;
}
};
Если я бегу Object.create(filterBuilder).build()
я получаю []
это хорошо. Но когда я начинаю добавлять фильтр
Object.create(filterBuilder).addFilter({dimension: '1', value: 'v'}).build();
я получаю один фильтр, который хорошо
Но если я
Object.create(filterBuilder).addFilter({dimension: '1', value: 'v'}).addFilter({dimension: '1', value: 'v'}).build();
я получить три фильтра, первый один от предыдущего вызова , Разве не Object.create
должен создать для меня новый объект?
Поскольку 'filter' является свойством прототипа, а не только созданным объектом. Все объекты, которые наследуются от этого прототипа, разделяют это свойство. Аналогичный случай [здесь] (http://stackoverflow.com/questions/34363094/understanding-prototypal-inheritance-methodologies-in-js/34363433) – MinusFour
'Object.create' создает новый пустой объект, который наследует свойства от' filterBuilder '. Он не создает новый массив или свойство 'filters'. – Bergi