资讯专栏INFORMATION COLUMN

阅读 is-generator-function 源码

cnsworder / 3314人阅读

摘要:从正则表达式可知不管书写是还是在之后为注意在的已经开始返回原始内容包含空格输出输出可选是因为对象简写语法获取类型在后不可靠提供了修改返回的类型标签获取原型通过构造一个通过获得原型参考文档文章若有纰漏请大家补充指正谢谢殇

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);
参考文档

is-generator-function

Function-prototype-toString-revision

文章若有纰漏请大家补充指正,谢谢~~  
http://blog.xinshangshangxin.com SHANG 殇

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/102621.html

相关文章

  • koa源码阅读之目录结构与辅助库相关

    摘要:从一个对象里面提取需要的属性这篇文章一直想写了还想起那一夜我看到白天的代码,实在太美了。 koa源码lib主要文件有 application.js context.js request.js response.js application.js koa主要的逻辑处理代码整个koa的处理 context.js 将req,res方法 挂载在这,生成ctx上下文对象 requests....

    sherlock221 评论0 收藏0
  • 深入koa源码(二):核心库原理

    摘要:最近读了的源码,理清楚了架构设计与用到的第三方库。本系列将分为篇,分别介绍的架构设计和个核心库,最终会手动实现一个简易的。本文来自心谭博客深入源码核心库原理所有系列文章都放在了。这一段逻辑封装在了核心库里面。 最近读了 koa2 的源码,理清楚了架构设计与用到的第三方库。本系列将分为 3 篇,分别介绍 koa 的架构设计和 3 个核心库,最终会手动实现一个简易的 koa。这是系列第 2...

    tyheist 评论0 收藏0
  • koa源码阅读之context.js/koa-convert/is-generator-functi

    摘要:老伙计今天我们来讲一下的还有一些自己写的库吧。我们常用来在中间件发出一些错误状态码。从而使得上级中间件可以这个错误从而响应默认的一个错误处理如果不是实例。看完全文都是好样的源码链接文档链接 hey 老伙计 今天我们来讲一下koa的context.js还有一些tj自己写的库吧。 context.js use strict; const createError = require(htt...

    caikeal 评论0 收藏0
  • 一篇文章把本该属于你的源码天赋还给你

    摘要:一些方法不应该这样不应该漫无目的地随手拿起一分源码,试图去通读。应该这样精心挑选要阅读的源码项目。这最好是与你的编程语言你的工作内容你的兴趣所在相关的,这样才能更切实地感受到阅读源码给你带来的益处,更有动力继续。 showImg(https://segmentfault.com/img/bVbcvmm?w=785&h=525); 怎么阅读源码 没有经验的技术差底子薄的初级程序员,如何阅...

    chanjarster 评论0 收藏0
  • 精读《源码学习》

    摘要:精读原文介绍了学习源码的两个技巧,并利用实例说明了源码学习过程中可以学到许多周边知识,都让我们受益匪浅。讨论地址是精读源码学习如果你想参与讨论,请点击这里,每周都有新的主题,周末或周一发布。 1. 引言 javascript-knowledge-reading-source-code 这篇文章介绍了阅读源码的重要性,精读系列也已有八期源码系列文章,分别是: 精读《Immer.js》源...

    aboutU 评论0 收藏0

发表评论

0条评论

cnsworder

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<