我正在尝试在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'是原型的属性而不是新创建的对象。所有从该原型继承的对象都共享该属性。类似的情况[here](http://stackoverflow.com/questions/34363094/understanding-prototypal-inheritance-methodologies-in-js/34363433) – MinusFour
Object.create'创建了一个新的空对象,它继承了filterBuilder的属性'。它不会创建新的数组或“过滤器”属性。 – Bergi