--- title: Generador slug: Web/JavaScript/Reference/Global_Objects/Generator tags: - ECMAScript2015 - ECMAScript6 - Generador - Generador Legado - Iterador Legado - JavaScript - Referencia translation_of: Web/JavaScript/Reference/Global_Objects/Generator original_slug: Web/JavaScript/Referencia/Objetos_globales/Generador ---
El objeto Generator
es retornado por una {{jsxref("Statements/function*", "función generator", "", 1)}} y es conformado tanto el protocolo iterable como el protocolo iterador.
Este objeto no puede ser instanciado directamente. En su lugar, una instancia del objeto Generator
puede ser devuelta por una función generator:
function* gen() { yield 1; yield 2; yield 3; } var g = gen(); // "Generator { }"
Tambien hereda propiedades de {{JSxRef("Iterator")}}
Tambien hereda propiedades de {{JSxRef("Iterator")}}
Generator.prototype.constructor
Generator.prototype[@@toStringTag]
"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(SpderMonkey) tambén implementa una versón mas temprana de generadores en JavaScript 1.7, donde el asterisco (*) en la declaración de la funcion no era necesario(sólo use la palabra reservada yield en el cuerpo de la función). Sin embargo, los generadores legados se encuentran depreciados. No los use. Serán removidos ({{bug(1083482)}}).
Generator.prototype.next()
{{non-standard_inline}}Generator.prototype.close()
{{non-standard_inline}}Generator.prototype.send()
{{non-standard_inline}}send(x)
Se corresponde a next(x)
en el objeto generador de ECMAScript 2015.Generator.
prototype.
throw()
{{non-standard_inline}}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 (as the generator is now closed)
Especificación | Estado | Comentario |
---|---|---|
{{SpecName('ES2015', '#sec-generator-objects', 'Generator objects')}} | {{Spec2('ES2015')}} | Definición inicial |
{{SpecName('ESDraft', '#sec-generator-objects', 'Generator objects')}} | {{Spec2('ESDraft')}} | |
{{CompatibilityTable}}
Funcionalidad | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Soporte basico | {{CompatChrome(39.0)}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
Funcionalidad | Android | Android Webview | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
---|---|---|---|---|---|---|---|---|
Soporte básico | {{CompatNo}} | {{CompatChrome(39.0)}} | {{CompatVersionUnknown}} | {{CompatVersionUnknown}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} | {{CompatChrome(39.0)}} |