Ссылка на статью
https://doka.guide/js/iterator/
Описание
В статье есть следующий пример, показывающий, как сделать объект итерируемым.
person[Symbol.iterator] = function () {
const properties = Object.keys(this)
let count = 0
return {
next() {
if (count < properties.length) {
const key = properties[count]
let result = { done: false, value: person[key] }
count++
return result
} else {
return { done: true }
}
}
}
}
Предлагаю немного изменить его.
- Запомнить через замыкание
this в начале функции, например _this.
- При получении значения
value через метод next получать значение из _this, а не через объект person.
Зачем это?
Это уменьшит вероятность случайных ошибок при копировании примера.
Итоговый вариант
person[Symbol.iterator] = function () {
const _this = this;
const properties = Object.keys(this)
let count = 0
return {
next() {
if (count < properties.length) {
const key = properties[count]
let result = { done: false, value: _this[key] }
count++
return result
} else {
return { done: true }
}
}
}
}
Готов сделать PR, если авторы согласны с правкой.
Пруфы
No response
Ссылка на статью
https://doka.guide/js/iterator/
Описание
В статье есть следующий пример, показывающий, как сделать объект итерируемым.
Предлагаю немного изменить его.
thisв начале функции, например_this.valueчерез методnextполучать значение из_this, а не через объектperson.Зачем это?
Это уменьшит вероятность случайных ошибок при копировании примера.
Итоговый вариант
Готов сделать PR, если авторы согласны с правкой.
Пруфы
No response