JavaScript Symbol.iterator — зробити об'єкт перебірним
Symbol.iterator — системний символ, який робить об'єкт перебірним: у for...of, у спред-операторі, у деструктуризації.
Загальний опис
Це не хак, а офіційний протокол мови. Усе, що перебирається — масив, рядок, Map, Set, NodeList — має цей метод. Звичайний об'єкт не має, і саме тому for...of по ньому кидає помилку.
Додавши його своєму класу, ти вбудовуєш його в мову: [...myCollection], for (const x of myCollection), const [a, b] = myCollection — усе почне працювати саме.
Найпростіше реалізувати його генератором (*[Symbol.iterator]()): тоді не треба вручну писати next() і done.
- Порада
-
Пишеш свою колекцію — додай
автор: NagarD*[Symbol.iterator](). Це п'ять рядків, які вмикають половину синтаксису мови.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| iterator | 38+ | 36+ | 9+ | 25+ | 12+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| iterator | 38+ | yes | yes | 9+ |
Приклади
+ запропонувати свій приклад у пісочниці
Свій клас, що працює у for...of і спреді.
class Playlist {
constructor() {
this.tracks = ['Пісня 1', 'Пісня 2', 'Пісня 3'];
}
// генератором — найпростіше
*[Symbol.iterator]() {
yield* this.tracks;
}
}
const playlist = new Playlist();
// тепер працює все одразу
for (const track of playlist) {
console.log(track);
}
console.log([...playlist]); // масив
const [first, second] = playlist; // деструктуризація
Коментарі
Коментарів ще немає — будьте першим!