Каково техническое определение итеративного Javascript и как вы тестируете его?
Я реализую полезный подкласс ES6Set
объект. Для многих из моих новых методов я хочу принять аргумент, который может быть либо другим Set, либо Array, либо действительно всем, что я могу повторить. Я называю это «итеративным» в моем интерфейсе и просто использую.forEach()
на нем (который отлично работает для набора или массива. Пример кода:
// remove items in this set that are in the otherIterable
// returns a count of number of items removed
remove(otherIterable) {
let cnt = 0;
otherIterable.forEach(item => {
if (this.delete(item)) {
++cnt;
}
});
return cnt;
}
Или же
// add all items from some other iterable to this set
addTo(iterable) {
iterable.forEach(item => {
this.add(item);
});
}
Но, я подозреваю, что на самом деле я не поддерживаю какую-либо итерацию в том смысле, в каком ее определяет ES6, поэтому мне интересно, что в реальном определении итерируемого Javascript используется термин, как в спецификации ES6?
Как вы проверяете это в ES6 Javascript?
Как вы должны повторить универсальный итерируемый?
Я нашел такие фразы в спецификации ES6:
Если присутствует параметр iterable, ожидается, что это будет объект, который реализует метод @@ iterator, который возвращает объект итератора, который создает двухэлементный объект в виде массива, первый элемент которого является значением, которое будет использоваться в качестве ключа WeakMap и чей второй элемент - это значение, связанное с этим ключом.
Но это относится к@@iterator method
который я не могу получить доступ через это имя свойства.