5、generator

175 阅读1分钟

1、生成器对象是由一个generator function返回的,并且它符合可迭代协议和迭代器协议

2、普通函数 VS 生成器函数

(1)生成器函数 [[IsGenerator]]:true

(2)生成器函数执行,函数fun并没有执行,因为没有输出11

(3)typeof输出也是function

(4)普通函数是 Function 的实例,普通函数.proto===Function.prototype

(5)生成器函数是 GeneratorFunction 的实例 生成器函数.proto===GeneratorFunction.prototype -> GeneratorFunction.prototype.proto===Function.prototype

(6)fun在Function的原型链上

(7)检测类型 原型上的Symbol.toStringTag是GeneratorFunction (8) 生成器函数不能被new (9)我们在func的原型上面随便加一个属性,用来让显示明显;

可以看到itor的__proto__找到了func的原型,说明itor是func的一个实例;说明func不被new 就可以返回一个实例(工厂模式)jQuery也是这样

总结: (1)生成器函数本身就是一个构造函数;不能被new执行,但是返回的结果就是一个实例