Это не работает, потому что вы неправильно реализовали итерируемый протокол.Чтобы объект был итерируемым, он должен иметь ключ @@iterator
(который у вас есть), , который возвращает итератор , который вам не хватает (массивы являются итераторами, но не итераторами).
Однако, поскольку массив является итеративным, вы можете использовать его свойство @@iterator
, чтобы получить итеративное для него.Тогда вы можете вернуть это.
class List{
constructor(){
this.data = [1,2,3];
}
[Symbol.iterator](){
return this.data[Symbol.iterator]();
}
}
let list = new List();
for(let i of list)
console.log(i);
Подробнее о протоколе итерации / итератора Javascript можно прочитать здесь .