我正在嘗試在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