Современный JS


Свойства частных классов, геттеры, итераторы в одном простом примере

Вам когда-нибудь требовалось непрерывно перебирать набор значений, т.е. возвращаться к первому значению по достижении конца? Можно использовать массив, увеличивать индекс и устанавливать его в 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
Войти в полноэкранный режим Выйти из полноэкранного режима

🙂

Оцените статью
devanswers.ru
Добавить комментарий