--- title: Generator slug: Web/JavaScript/Reference/Global_Objects/Generator translation_of: Web/JavaScript/Reference/Global_Objects/Generator ---
O objeto Generator é retornado por {{jsxref("Statements/function*", "generator function", "", 1)}} e conforme iterable protocol e o iterator protocol.
function* gen() {
yield 1;
yield 2;
yield 3;
}
var g = gen(); // "Generator { }"
function* idMaker(){
var index = 0;
while(true)
yield index++;
}
var gen = idMaker(); // "Generator { }"
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
// ...
Firefox (SpiderMonkey) também implementa a versão anterior do generator em JavaScript 1.7, onde o asterisco (*) na declaração da função não era necessário (somente era necessário usar a palavra reservada yield no corpo da função). Contudo, legacy generators estão obsoletos. Não os use, eles serão removidos ({{bug(1083482)}}).
Generator.prototype.next() {{non-standard_inline}}next() do ES6.Generator.prototype.close() {{non-standard_inline}}next() um erro {{jsxref("StopIteration")}} será lançado. Isto corresponde ao método return() do ES6.Generator.prototype.send() {{non-standard_inline}}send(x) corresponde ao next(x) do ES6.Generator.prototype.throw() {{non-standard_inline}}throw() do ES6.function* fibonacci() {
var a = yield 1;
yield a * 2;
}
var it = fibonacci();
console.log(it); // "Generator { }"
console.log(it.next()); // 1
console.log(it.send(10)); // 20
console.log(it.close()); // undefined
console.log(it.next()); // throws StopIteration (Como o generator está fechado)
| Especificações | Status | Comentário |
|---|---|---|
| {{SpecName('ES6', '#sec-generator-objects', 'Generator objects')}} | {{Spec2('ES6')}} | Definição Inicial |
| {{SpecName('ESDraft', '#sec-generator-objects', 'Generator objects')}} | {{Spec2('ESDraft')}} |
{{CompatibilityTable}}
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | {{CompatChrome(39.0)}} | {{CompatVersionUnknown}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
| Feature | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|---|
| Basic support | {{CompatNo}} | {{CompatChrome(39.0)}} | {{CompatVersionUnknown}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} | {{CompatChrome(39.0)}} |