Комментарии 7
Еще три копейки про итераторы:
- Там не только next(), но еще методы return() и throw(), в которых кроется весь «дьявол в деталях», когда идет речь про досрочное прерывание итерации, например.
- В конце из next() возвращается не просто { done: true }, а { done: true, value: xyz } где xyz — это то, что генератор вернул через оператор return. И это значение xyz не учитывается при, например, проходе по for-of, spread и т.д. Также next() возвращает этот самый xyz только один раз, дальше будет undefined.
- В статье зачем-то созданный итератор присваивается в this.iterator, не надо так делать.
+4
«for… of» и "..." перегрузили, 2ality.com/2011/12/fake-operator-overloading.html, а вот еще одна старая статья про ограниченные возможности перегрузки других операторов.
Не то чтобы те методы совсем хороши, но дают возможности для
var p = new Point();
p._ = new Point(1, 2) + new Point(3, 4) + new Point(5, 6);
p._ = new Point(1, 2) * new Point(3, 4) * new Point(5, 6);
Не то чтобы те методы совсем хороши, но дают возможности для
var p = new Point();
p._ = new Point(1, 2) + new Point(3, 4) + new Point(5, 6);
p._ = new Point(1, 2) * new Point(3, 4) * new Point(5, 6);
0
Прошу прощения, но причем тут перегрузка? For of это отличный пример полиморфизма, а не перегрузки. В каком месте for of перегружается? For of конструкция работает только с итерируемыми объектами.
+1
Может я немного не точен в определениях, с института много времени прошло. Просто прочитав статью первым делом написал небольшой кусочек когда меняющий поведение Array.prototype[Symbol.iterator], так чтобы при использовании спреда получить массив длинной в десять со случайными элементами.
Ваш пример конечно явный полиморфизм, но мне была интересна возможность использования именно перегрузки, поскольку это повышает гибкость, учитывая весьма ограниченные методы работы с массивами в js, было весьма полезно)
Ваш пример конечно явный полиморфизм, но мне была интересна возможность использования именно перегрузки, поскольку это повышает гибкость, учитывая весьма ограниченные методы работы с массивами в js, было весьма полезно)
0
Добрый день!)
Спасибо за ваш комментарий!
Array.prototype[Symbol.iterator] действительно переписывает существующую в Array.prototype реализацию итератора, но в статье мы так не делаем =)
В данной статье я хотел показать как мы можем написать свою сущность которая реализует Symbol.iterator, так же как javascript в Array.prototype, String.prototype и так далее
+ показать как использовать конструкции языка для взаимодействия с нашей сущностью.
Как заметил limitofzero, это действительно хороший пример полиморфизма)
Спасибо за ваш комментарий!
Array.prototype[Symbol.iterator] действительно переписывает существующую в Array.prototype реализацию итератора, но в статье мы так не делаем =)
В данной статье я хотел показать как мы можем написать свою сущность которая реализует Symbol.iterator, так же как javascript в Array.prototype, String.prototype и так далее
+ показать как использовать конструкции языка для взаимодействия с нашей сущностью.
Как заметил limitofzero, это действительно хороший пример полиморфизма)
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Symbol.iterator в Javascript