Показать сообщение отдельно
  #16 (permalink)  
Старый 14.10.2014, 16:29
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

В 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);
}

Последний раз редактировалось Octane, 14.10.2014 в 18:54.
Ответить с цитированием