Spec-Zone.ru › JavaScript

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.

The inheritance diagram of generators and generator functions

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-generatorfunction.prototype.prototype
ECMAScript® 2027 Language Specification
# sec-generatorfunction-instances-prototype

См. также

  • function*
  • function* expression
  • AsyncGeneratorFunction
  • GeneratorFunction
  • Наследование и цепочка прототипов
  • Итераторы и генераторы

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API