阅读 is-generator-function 源码
Function.prototype.toString
从正则表达式 /^\s*(?:function)?\*/
可知
1: GeneratorFunction
不管书写是 function*
还是 function *
在 Function.prototype.toString
之后为 function*
注意
在ES2019
的 Function.prototype.toString revision 已经开始返回原始内容, 包含空格
function * fn() {}
Function.prototype.toString.call(fn);
node < 10, 输出 function* fn() {}
node >=10, 输出 function * fn() {}
2: function
可选是因为对象简写语法
var o = { *fn() {}, }; // *fn() {} console.info(Function.prototype.toString.call(o.fn));
Object.prototype.toString
获取类型在 ES2015
后不可靠
var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol'; if (!hasToStringTag) { var str = toStr.call(fn); return str === '[object GeneratorFunction]'; }
ES2015 提供了 [Symbol.toStringTag]
修改 Object.prototype.toString()
返回的类型标签
function* fn() {} Object.defineProperty(fn, Symbol.toStringTag, { get() { return 'MyTag'; }, }); // [object MyTag] console.log(Object.prototype.toString.call(fn));
获取 GeneratorFunction
原型
通过 function
构造一个 GeneratorFunction
, 通过 Object.getPrototypeOf
获得原型
var getProto = Object.getPrototypeOf; var generatorFunc = Function('return function*() {}')(); var GeneratorFunction = getProto(generatorFunc);
参考文档
文章若有纰漏请大家补充指正,谢谢~~
http://blog.xinshangshangxin.com SHANG 殇
相关推荐
kevinweijc 2020-08-18
ELEMENTS爱乐小超 2020-07-04
xiaoge00 2020-06-14
free0day 2020-05-25
cas的无名 2020-05-19
hongxiangping 2020-04-30
82550495 2020-02-20
风吹夏天 2020-02-17
80437916 2020-02-15
First00 2020-01-05
lert0 2019-11-19
wwater 2011-03-02
TianlangStudio 2019-11-03
wwater 2011-11-20
zhanggang 2019-09-26
dly 2015-05-29
Selier 2018-08-25
做你的老王 2015-08-19