Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

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 :

js
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 est GeneratorFunction.prototype.

Note : Les objets Generator ne 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 dans Object.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 bloc try...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

js
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