Function.prototype.toString从正则表达式可以看出/^\s*(?:function)?\*/1:GeneratorFunctionFunction.prototype.toString是function*之后无论写成function*还是function*注意ES2019Function.prototype.toString改版已经开始返回原来的内容,包括空格function*fn(){}Function.prototype.toString.call(fn);node<10,outputfunction*fn(){}node>=10,outputfunction*fn(){}2:function是可选的,因为对象简写语法varo={*fn(){},};//*fn(){}console.info(Function.prototype.toString.call(o.fn));Object.prototype.toString在ES2015varhasToStringTag=typeofSymbol==='function'&&typeofSymbol.toStringTag==='symbol';if(!hasToStringTag){varstr=toStr.call(fn);returnstr==='[objectGeneratorFunction]';}ES2015提供[Symbol.toStringTag]修改Object.prototype.toString()function*fn(){}Object.defineProperty(fn,Symbol.toStringTag,{get(){return'MyTag';},});//[objectMyTag]console.log(Object.prototype.toString.call(fn));通过Funct获取GeneratorFunction原型ion构造一个GeneratorFunction,通过Object.getPrototypeOf获取原型vargetProto=Object.getPrototypeOf;vargeneratorFunc=Function('返回函数*(){}')();varGeneratorFunction=getProto(generatorFunc);参考文档is-generator-functionFunction-prototype-toString-revision文章中如有错误请指正,谢谢~~http://blog.xinshangshangxin.comSHANGShang
