Потоковый стиль
by Artem
JavaScript
'use strict';
function Data(data) {
this.data = data;
this.filters = [];
}
// Не сохраняет данные о состоянии, возвращаем новый объект
Data.prototype.filter = function(criteria) {
const data = this.data.filter(param => criteria(param));
return new Data(data);
};
// Сохраняет данные о состоянии, возвращаем this
Data.addFilter = function(filter) {
this.filters.push(filter);
return this;
}
var d = new Data([0, 1, 2, 3]);
d
.filter(Boolean)
.filter(param => param > 2)
.addFilter(x => x !== 2)
.addFilter(x => x % 2);