Потоковый стиль

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);