JavaScript 生成器及其原型链

fre*_*low 6 javascript prototype generator

我正在玩弄 JavaScript 生成器,并根据以下代码及其输出有 2 个问题:

const a = function*(){}(); // Object [Generator] {}
const b = a.__proto__;     // Object [Generator] {}
const c = b.__proto__;     // Object [Generator] {}
const d = c.__proto__;     // {}
const e = d.__proto__;     // {}
const f = e.__proto__;     // null
console.log(a, b, c, d, e, f);
Run Code Online (Sandbox Code Playgroud)

问题 1

似乎每个生成器对象都有自己独特的原型,而且它们都有一个共同的原型:

const x = function*(){}();
const y = x.__proto__;
const z = y.__proto__;
console.log(b === y); // false
console.log(c === z); // true
Run Code Online (Sandbox Code Playgroud)

我的上述理解是否正确?

问题2

由于fnulle可能是Object.prototype

console.log(e === Object.prototype); // true
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚是什么d。有Something.prototype等于d吗?

yao*_*o99 3

在GeneratorFunction Objects部分,有一个关系图: 生成器对象关系

问题1

是的。

问题2

d是一个IteratorPrototype。并由文档:

以下表达式是 ECMAScript 代码访问 %IteratorPrototype% 对象的一种方式:

Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()))
Run Code Online (Sandbox Code Playgroud)

似乎不存在等于 的Iterator这样的。Iterator.prototyped