Реализовать счетчик, сокрыв детали реализации

Написать функцию createSummator(initialValue), с необязательным первым параметром, который является начальным значением счетчика. Если аргумент initialValue не передан, то отчет начинается с 0. При каждом вызове функция возвращает объект с методами inc(num), dec(num), get(). Объектов, которые возвращает функция createSummator, может быть любое количество. Реализация должна позволять манипуляции со значением счетчика только с использованием этих методов.

const s1 = createSummator()
s1.inc()
s1.inc()
s1.inc()
s1.get()
const s2 = createSummator(10)
s2.inc(2)
s2.inc(3)
s2.inc(4)
s2.get()
const s3 = createSummator(5)
s3.inc(5)
s3.dec(10)
s3.get()