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](). Це п'ять рядків, які вмикають половину синтаксису мови.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 43 | 36 | 10 | 30 | 12 | — |
| Переглядач | ||||
|---|---|---|---|---|
| 43 | 43 | 36 | 10 |
| Переглядач | ||
|---|---|---|
| 0.12.0 | 1.0 |
Приклади
+ запропонувати свій приклад у пісочниці
Свій клас, що працює у 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; // деструктуризація
Коментарі
Коментарів ще немає — будьте першим!