AsyncGeneratorFunction.prototype.prototype
prototype は AsyncGeneratorFunction.prototype のプロパティで、すべての非同期ジェネレーター関数で共有されます。その値は AsyncGenerator.prototype です。 async function* 構文またはAsyncGeneratorFunction() コンストラクターで生成されるそれぞれの非同期ジェネレーター関数も、自身の prototype プロパティを保有します。このプロパティのプロトタイプは AsyncGeneratorFunction.prototype.prototype です。非同期ジェネレーター関数が呼び出されると、その prototype プロパティが返される非同期ジェネレーターオブジェクトのプロトタイプとなります。
値
AsyncGenerator.prototype と同じオブジェクトです。技術的には AsyncGeneratorFunction.prototype.prototype の方が正確な名称ですが、AsyncGenerator.prototype の方が非同期ジェネレーターオブジェクトのプロトタイプであるという直感に訴えかけます。
AsyncGeneratorFunction.prototype.prototype のプロパティ属性 | |
|---|---|
| 書込可能 | 不可 |
| 列挙可能 | 不可 |
| 設定可能 | 可 |
それぞれの AsyncGeneratorFunction インスタンスの prototype プロパティは、プロパティを持たない空のオブジェクトであり、そのプロトタイプは AsyncGeneratorFunction.prototype.prototype です。次のプロパティ属性を持っています。
AsyncGeneratorFunction.prototype.prototype のプロパティ属性 | |
|---|---|
| 書込可能 | 可 |
| 列挙可能 | 不可 |
| 設定可能 | 不可 |
解説
非同期ジェネレーター関数のインスタンスには 2 つの prototype プロパティがあります。まず 1 つは自身の prototype プロパティです。 2 つ目はそのプロトタイプ(つまり AsyncGeneratorFunction.prototype)上の prototype プロパティです。(すべての非同期ジェネレーター関数は AsyncGeneratorFunction のインスタンスであるため、そのプロトタイプは AsyncGeneratorFunction.prototype であることを思い出してください。)
async function* genFunc() {}
const AsyncGeneratorFunctionPrototype = Object.getPrototypeOf(genFunc);
console.log(Object.hasOwn(genFunc, "prototype")); // true
console.log(Object.hasOwn(AsyncGeneratorFunctionPrototype, "prototype")); // true
非同期ジェネレーター関数が呼び出されると、その非同期ジェネレーター関数の prototype プロパティが、返される非同期ジェネレーターオブジェクトのプロトタイプです。
const gen = genFunc();
const proto = Object.getPrototypeOf;
console.log(proto(gen) === genFunc.prototype); // true
console.log(proto(proto(gen)) === AsyncGeneratorFunctionPrototype.prototype); // true
次の図は、非同期ジェネレーター関数とそのインスタンスのプロトタイプチェーンを示しています。それぞれの中空の矢印は継承関係(つまりプロトタイプリンク)を示し、それぞれの実線の矢印はプロパティ関係を示します。 なお、 gen から genFunc にアクセスする方法はありません。両者の間には instanceof 関係のみが存在します。
仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-asyncgeneratorfunction-prototype-prototype> |
| ECMAScript® 2026 Language Specification> # sec-asyncgeneratorfunction-instances-prototype> |