Сообщение от Octane
|
а как ты реализуешь итератор для браузеров, которые поддерживают Map и Set, но не поддерживают @@iterator?
|
Написан
полифил, который аккуратно добавляет поддержку без оверхедов, т.е. работает всё также быстро.
PS:
Наглядный пример использования протокола @@iterator в работе:
// Для более сахарного вида используем итератор на основе генератора
$C(function *() {
var str = '1-2 4-5 6-7';
var rgxp = /(\d+)-(\d+)/g;
var tmp;
while ((tmp = rgxp.exec(str))) {
yield tmp;
}
}).get() // [["1-2", "1", "2"], ["4-5", "4", "5"], ["6-7", "6", "7"]]
// Можно любому объекту или классу определить свойство @@iterator и Collection это поймёт
$C({'@@iterator': function *() {
for (let i = 0; i < 10; i++) {
yield i;
}
}}).get() // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]