Хуй ее знает, при чем тут прототипы, и в чем суть вопроса, но генераторы работают примерно так
arr = [1, 2, 3, 4, 5]
MyObject = {}
Object.defineProperty(MyObject, "double", {get: function(){return this.number + this.number}})
MyObjectConstructor = function(number){this.number = number}
MyObjectConstructor.prototype = MyObject
gen = function*(){
for(var i = 0; i < arr.length; i++){
yield new MyObjectConstructor(arr[i])
}
}()
current = gen.next()
while(!current.done) { console.log(current.value.number, current.value.double); current = gen.next() }
delete current
и массив не является им альтернативой, так как это нечто типа ленивых списков. Каждая итерация замерзает до следующего вызова.
Что касается let, то тут, похоже, его не надо втыкать. Он на каждой итерации создает новое окружение, а тут, все работает и без него прекрасно, кроме лишнего оверхеда от него толку тут нет