В NodeList.prototype добавляется итератор, который можно использовать в for-of
[][Symbol.iterator] === [].values //true
просто добавить метод values в NodeList.prototype не получится, потому что в for-of используется именно iterator, как я понимаю используется ключ типа Symbol для того, чтобы не конфликтовать с обычными свойствами (раньше было свойство @@iterator)
Стандартный ключ Symbol.iterator используется для именования всех итераторов:
Array.prototype[Symbol.iterator]
Map.prototype[Symbol.iterator]
и т.д.
тоесть это заранее подготовленный
Symbol.iterator = Symbol();
с помощью которого в прототипы добавили итераторы
Внутри метода iterator что-то типа такого:
Array.prototype.myIterator = function () {
return function * (array) {
var index = 0;
while (index < array.length) {
yield array[index++];
}
}(this);
};
var array = [1, , 3],
values = array.myIterator(),
value;
for (value of values) {
alert(value);
}