Generator
Baseline
Widely available
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis septembre 2016.
L'objet Generator est retourné par une fonction génératrice et il respecte à la fois le protocole itérable et le protocole itérateur.
Generator est une sous-classe de Iterator.
Constructeur
Il n'existe aucune entité JavaScript qui corresponde au constructeur Generator. Les instances de Generator doivent être retournées par des fonctions génératrices :
function* generator() {
yield 1;
yield 2;
yield 3;
}
const gen = generator(); // "Generator { }"
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
Il existe seulement un objet caché qui est l'objet prototype partagé par tous les objets créés par les fonctions génératrices. Cet objet est souvent présenté comme Generator.prototype pour lui donner l'apparence d'une classe, mais il devrait plus justement être appelé GeneratorFunction.prototype.prototype, car GeneratorFunction est une entité JavaScript réelle. Pour comprendre la chaîne de prototypes des instances de Generator, voir GeneratorFunction.prototype.prototype.
Propriétés d'instance
Ces propriétés sont définies sur Generator.prototype et partagées par toutes les instances de Generator.
Generator.prototype.constructor-
La fonction constructeur qui a créé l'objet instance. Pour les instances de
Generator, la valeur initiale estGeneratorFunction.prototype.Note : Les objets
Generatorne conservent pas de référence à la fonction génératrice qui les a créés. Generator.prototype[Symbol.toStringTag]-
La valeur initiale de la propriété
[Symbol.toStringTag]est la chaîne de caractères"Generator". Cette propriété est utilisée dansObject.prototype.toString().
Méthodes d'instance
Hérite également des méthodes d'instance de son parent Iterator.
Generator.prototype.next()-
Retourne une valeur produite par l'expression
yield. Generator.prototype.return()-
Agit comme si une instruction
returnétait insérée dans le corps du générateur à la position actuelle de suspension, ce qui termine le générateur et lui permet d'effectuer toute tâche de libération lorsqu'elle est combinée avec un bloctry...finally. Generator.prototype.throw()-
Agit comme si une instruction
throwétait insérée dans le corps du générateur à la position actuelle de suspension, ce qui informe le générateur d'une condition d'erreur et lui permet de gérer l'erreur, ou d'effectuer une libération et de se clôturer.
Exemple
>Un itérateur infini
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
// …
Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-generator-objects> |
Compatibilité des navigateurs
Voir aussi
- La déclaration
function* - L'expression
function* - L'objet
GeneratorFunction - Les protocoles d'itération