GeneratorFunction.prototype.prototype
prototype — свойство GeneratorFunction.prototype, общее для всех функций-генераторов. Его значение — Generator.prototype. Каждая функция-генератор, созданная с использованием синтаксиса function* или конструктора GeneratorFunction(), также имеет собственное свойство prototype, прототипом которого является GeneratorFunction.prototype.prototype. Когда функция-генератор вызывается, ее свойство prototype становится прототипом возвращаемого объекта-генератора.
Значение
Тот же объект, что и Generator.prototype. GeneratorFunction.prototype.prototype — более точное с технической точки зрения название, но Generator.prototype интуитивно понятнее, поскольку это прототип объектов-генераторов.
Атрибуты свойства GeneratorFunction.prototype.prototype
| |
|---|---|
| Записываемый | да |
| Перечислимый | нет |
| Настраиваемый | нет |
Свойство prototype каждого экземпляра GeneratorFunction представляет собой пустой объект без свойств, прототипом которого является GeneratorFunction.prototype.prototype. Он имеет следующие атрибуты свойства:
Атрибуты свойства GeneratorFunction.prototype.prototype
| |
|---|---|
| Записываемый | нет |
| Перечислимый | нет |
| Настраиваемый | да |
Описание
Экземпляр функции-генератора имеет два свойства prototype. Первое — это собственное свойство prototype. Второе — это свойство prototype в его прототипе, которым является GeneratorFunction.prototype. (Помните, что каждая функция-генератор является экземпляром GeneratorFunction, поэтому ее прототипом является GeneratorFunction.prototype.)
function* genFunc() {}
const GeneratorFunctionPrototype = Object.getPrototypeOf(genFunc);
console.log(Object.hasOwn(genFunc, "prototype")); // true
console.log(Object.hasOwn(GeneratorFunctionPrototype, "prototype")); // true
Когда вызывается функция-генератор, свойство prototype этой функции становится прототипом возвращаемого объекта-генератора.
const gen = genFunc(); const proto = Object.getPrototypeOf; console.log(proto(gen) === genFunc.prototype); // true console.log(proto(proto(gen)) === GeneratorFunctionPrototype.prototype); // true
Следующая диаграмма иллюстрирует цепочку прототипов функции-генератора и ее экземпляров. Каждая пустая стрелка указывает на отношение наследования (то есть связь прототипа), а каждая сплошная стрелка — на отношение свойства. Обратите внимание, что нет способа получить доступ к genFunc из gen — у них есть только отношение instanceof.
Спецификации
| Спецификация |
|---|
| ECMAScript® 2027 Language Specification # sec-generatorfunction.prototype.prototype |
| ECMAScript® 2027 Language Specification # sec-generatorfunction-instances-prototype |
См. также
function*function*expressionAsyncGeneratorFunctionGeneratorFunction- Наследование и цепочка прототипов
- Итераторы и генераторы
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/GeneratorFunction/prototype