Generator - JavaScript | MDN

コンストラクター

Generator コンストラクターに関する JavaScript の実体はありません。Generator のインスタンスはジェネレーター関数から返す必要があります。

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

ジェネレーター関数によって生成されるすべてのオブジェクトが共有する隠されたプロトタイプオブジェクトだけがあります。このオブジェクトはクラスに見せかけるため Generator.prototype と表記されることが多いですが、GeneratorFunction が実際の JavaScript エンティティであるため、より適切には GeneratorFunction.prototype.prototype と呼ぶべきです。Generatorインスタンスのプロトタイプチェーンを理解するには、GeneratorFunction.prototype.prototype を参照してください。

インスタンスプロパティ

これらのプロパティは Generator.prototype に定義され、すべての Generator インスタンスで共有されます。

Generator.prototype.constructor

作成されたインスタンスオブジェクトのコンストラクター関数です。Generator インスタンスでは、初期値は GeneratorFunction.prototype です。

メモ: Generator オブジェクトは、それ自体を作成したジェネレーター関数への参照を格納しません。

Generator.prototype[Symbol.toStringTag]

[Symbol.toStringTag] プロパティの初期値であり、文字列 "Generator" です。このプロパティは Object.prototype.toString() で使用されます。

インスタンスメソッド

親である Iterator から継承したインスタンスメソッドもあります

Generator.prototype.next()

yield 式で得られた値を返します。

Generator.prototype.return()

ジェネレーターの本体内で、現在の停止位置に return 文が挿入されたかのように振る舞い、これによりジェネレーターが完了します。また、try...finally ブロックと組み合わせることで、ジェネレーターがクリーンアップ処理を実行することができるようにします。

Generator.prototype.throw()

ジェネレーターの本体において、現在の停止位置に throw 文が挿入されたかのように振る舞います。これによりジェネレーターはエラー状態を認識し、エラーを処理したり、クリーンアップを実行して自身を終了させたりすることができます。

無限イテレーター

ジェネレーター関数では、値は必要になるまで評価されません。したがってジェネレーターは、潜在的に無限のデータ構造を定義することができます。

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
// …

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-generator-objects

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute

This page was last modified on by MDN contributors.