Generator
对象被返回通过
generator 函数
且它同时符合
可迭代协议
和
迭代器协议
.
此对象不能直接实例化。相反,
Generator
实例可以被返回来自
generator 函数
:
function* generator() {
yield 1;
yield 2;
yield 3;
}
const gen = generator(); // "Generator { }"
Generator.prototype.next()
yield
表达式。
Generator.prototype.return()
Returns the given value and finishes the generator.
Generator.prototype.throw()
Throws an error to a generator (also finishes the generator, unless caught from within that generator).
function* infinite() {
let index = 0;
while (true) {
yield index++;
}
}
const generator = infinite(); // "Generator { }"
console.log(generator.next().value); // 0
console.log(generator.next().value); // 1
console.log(generator.next().value); // 2
// ...
| 规范 |
|---|
|
ECMAScript (ECMA-262)
The definition of 'Generator objects' in that specification. |
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Generator
|
Chrome 39 | Edge 13 | Firefox 26 | IE No | Opera 26 | Safari 10 | WebView Android 39 | Chrome Android 39 | Firefox Android 26 | Opera Android 26 | Safari iOS 10 | Samsung Internet Android 4.0 |
nodejs
4.0.0
|
next
|
Chrome 39 | Edge 13 | Firefox 26 | IE No | Opera 26 | Safari 10 | WebView Android 39 | Chrome Android 39 | Firefox Android 26 | Opera Android 26 | Safari iOS 10 | Samsung Internet Android 4.0 | nodejs Yes |
return
|
Chrome 50 | Edge 13 | Firefox 38 | IE No | Opera 37 | Safari 10 | WebView Android 50 | Chrome Android 50 | Firefox Android 38 | Opera Android 37 | Safari iOS 10 | Samsung Internet Android 5.0 | nodejs 6.0.0 |
throw
|
Chrome 39 | Edge 13 | Firefox 26 | IE No | Opera 26 | Safari 10 | WebView Android 39 | Chrome Android 39 | Firefox Android 26 | Opera Android 26 | Safari iOS 10 | Samsung Internet Android 4.0 |
nodejs
4.0.0
|
完整支持
不支持
用户必须明确启用此特征。
Generator
Function
Object
Object.prototype.__defineGetter__()
Object.prototype.__defineSetter__()
Object.prototype.__lookupGetter__()
Object.prototype.__lookupSetter__()
Object.prototype.hasOwnProperty()
Object.prototype.isPrototypeOf()
Object.prototype.propertyIsEnumerable()
Object.prototype.toLocaleString()
Object.prototype.toSource()
Object.prototype.toString()
Object.prototype.valueOf()
Object.setPrototypeOf()