You need to specify Symbol.iterator
property for SomeClass
which returns iterator for class instances. Iterator must have next()
method, witch in turn returns object with done
and value
fields. Simplified example:
function SomeClass() {
this._data = [1,2,3,4];
}
SomeClass.prototype[Symbol.iterator] = function() {
var index = 0;
var data = this._data;
return {
next: function() {
return { value: data[++index], done: !(index in data) }
}
};
};
Or using ES6 classes and arrow functions:
class SomeClass {
constructor() {
this._data = [1,2,3,4];
}
[Symbol.iterator]() {
var index = -1;
var data = this._data;
return {
next: () => ({ value: data[++index], done: !(index in data) })
};
};
}
And usage:
var obj = new SomeClass();
for (var i of obj) { console.log(i) }
In your updated question you realized class iterator through generator function. You can do so, but you must understand that iterator COULD NOT BE a generator. Actually iterator in es6 is any object that has specific next()
method
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…