Свойства частных классов, геттеры, итераторы в одном простом примере
Вам когда-нибудь требовалось непрерывно перебирать набор значений, т.е. возвращаться к первому значению по достижении конца? Можно использовать массив, увеличивать индекс и устанавливать его в 0 при достижении конца, а можно воспользоваться возможностью изучить некоторые современные возможности js:
class Looper {
#i // iterator
#b // iterable e.g. array, Map, Set
#v // value
constructor(iterable) {
this.#b = iterable
this.reset()
}
get value() {
return this.#v.value
}
get next() {
this.#v = this.#i.next()
if (this.#v.done) {
this.reset()
}
return this.value
}
reset() {
this.#i = this.#b[Symbol.iterator]()
this.#v = this.#i.next()
return this
}
}
Пример использования:
const loop = new Looper([1,2,3])
loop.value //1
loop.next //2
loop.next //3
loop.next //1
loop.next //2
loop.reset()
loop.value //1
loop.next //2
loop.reset().value //1
loop.next //2
loop.next //3
🙂