このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

GeneratorFunction.prototype.prototype

prototypeGeneratorFunction.prototype のプロパティで、すべてのジェネレーター関数で共有されます。その値は Generator.prototype です。 function* 構文またはGeneratorFunction() コンストラクターで生成されるそれぞれのジェネレーター関数も、自身の prototype プロパティを保有します。このプロパティのプロトタイプは GeneratorFunction.prototype.prototype です。ジェネレーター関数が呼び出されると、その prototype プロパティが返されるジェネレーターオブジェクトのプロトタイプとなります。

Generator.prototype と同じオブジェクトです。技術的には GeneratorFunction.prototype.prototype の方が正確な名称ですが、Generator.prototype の方がジェネレーターオブジェクトのプロトタイプであるという直感に訴えかけます。

GeneratorFunction.prototype.prototype のプロパティ属性
書込可能
列挙可能不可
設定可能不可

それぞれの GeneratorFunction インスタンスの prototype プロパティは、プロパティを持たない空のオブジェクトであり、そのプロトタイプは GeneratorFunction.prototype.prototype です。次のプロパティ属性を持っています。

GeneratorFunction.prototype.prototype のプロパティ属性
書込可能不可
列挙可能不可
設定可能

解説

ジェネレーター関数のインスタンスには 2 つの prototype プロパティがあります。まず 1 つは自身の prototype プロパティです。 2 つ目はそのプロトタイプ(つまり GeneratorFunction.prototype)上の prototype プロパティです。(すべてのジェネレーター関数は GeneratorFunction のインスタンスであるため、そのプロトタイプは GeneratorFunction.prototype であることを思い出してください。)

js
function* genFunc() {}
const GeneratorFunctionPrototype = Object.getPrototypeOf(genFunc);
console.log(Object.hasOwn(genFunc, "prototype")); // true
console.log(Object.hasOwn(GeneratorFunctionPrototype, "prototype")); // true

ジェネレーター関数が呼び出されると、そのジェネレーター関数の prototype プロパティが、返されるジェネレーターオブジェクトのプロトタイプです。

js
const gen = genFunc();
const proto = Object.getPrototypeOf;
console.log(proto(gen) === genFunc.prototype); // true
console.log(proto(proto(gen)) === GeneratorFunctionPrototype.prototype); // true

次の図は、ジェネレーター関数とそのインスタンスのプロトタイプチェーンを示しています。それぞれの中空の矢印は継承関係(つまりプロトタイプリンク)を示し、それぞれの実線の矢印はプロパティ関係を示します。 なお、 gen から genFunc にアクセスする方法はありません。両者の間には instanceof 関係のみが存在します。

ジェネレーターとジェネレーター関数の継承図

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-generatorfunction.prototype.prototype
ECMAScript® 2026 Language Specification
# sec-generatorfunction-instances-prototype

関連情報