ООП в JavaScriptНаследованиеmedium

Observable Set

Реализуйте класс ObservableSet, который поддерживает все стандартные операции класса Set, но позволяет с помощью колбэка отслеживать изменения в экзампляре.

У обычного Set довольно много методов:

  • Мутирующие: add, clear и delete
  • Немутирующие: difference, entries, forEach, has, intersection, isDisjointFrom, isSubsetOf, isSupersetOf, keys, symmetricDifference, union, values
  • Геттер: size
  • @@iterator, позволяющий использовать spread-синтаксис и цикл for..of

Все эти методы должны поддерживаться у ObservableSet.

Конструктор ObservableSet должен принимать два аргумента:

  • обязательный первый аргумент — колбэк, который будет выполняться каждый раз при изменении сета
  • необязательный второй аргумент — iterable, которым иницилизируется сет

Когда мы выполняем одно из мутирующих действий, необходимо вызывать колбэк из конструктора. Первый аргумент колбэка — строка с названием действия, а второй — аргументы, с которыми вызывался соответствующий метод.

const set = new ObservableSet( (action, args) => console.log({ action, args }), [1, 2, 3] ); set.add(12); // action === "add", args === [12] set.has(12); set.size; set.delete(12); // action === "delete", args === [12] set.clear(); // action === "clear", args === []