Jamey's Jamey's
首页
导航站
  • 学习专栏

    • 《HTML》笔记
    • 《CSS》笔记
    • 《JavaScript》笔记
    • 《Vue》笔记
    • 《Git》笔记
    • 《规范》笔记
    • 《软技能》笔记
    • 《面试》笔记
    • 《持续集成&交付&部署》笔记
  • 踩坑专栏

    • 《Element-UI 实践系列》笔记
    • 《移动端 实践系列》笔记
    • 《综合》笔记
  • 配置专栏

    • 《环境系列》笔记
  • 极空间

    • Docker
  • 影视

    • movie
  • 编辑器笔记

    • 开发编辑器
  • 浏览器笔记

    • Chrome
  • Mac笔记

    • Mac
  • 跨界学习

    • 运营
  • 破解合集

    • 破解
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 书单
    • 关于

Jamey

首页
导航站
  • 学习专栏

    • 《HTML》笔记
    • 《CSS》笔记
    • 《JavaScript》笔记
    • 《Vue》笔记
    • 《Git》笔记
    • 《规范》笔记
    • 《软技能》笔记
    • 《面试》笔记
    • 《持续集成&交付&部署》笔记
  • 踩坑专栏

    • 《Element-UI 实践系列》笔记
    • 《移动端 实践系列》笔记
    • 《综合》笔记
  • 配置专栏

    • 《环境系列》笔记
  • 极空间

    • Docker
  • 影视

    • movie
  • 编辑器笔记

    • 开发编辑器
  • 浏览器笔记

    • Chrome
  • Mac笔记

    • Mac
  • 跨界学习

    • 运营
  • 破解合集

    • 破解
  • 本站

    • 分类
    • 标签
    • 归档
  • 我的

    • 收藏
    • 书单
    • 关于
  • 深入系列

  • 专题系列

  • underscore系列

    • underscore 系列之如何写自己的 underscore
    • underscore 系列之链式调用
    • underscore 系列之内部函数 cb 和 optimizeCb
    • underscore 系列之内部函数 restArgs
    • underscore 系列之防冲突与 Utility Functions
    • underscore 系列之实现一个模板引擎(上)
    • underscore 系列之实现一个模板引擎(下)
    • underscore 系列之字符实体与 _.escape
    • underscore 的源码该如何阅读?
      • 📖. 前言
      • 一. 起因
      • 二. 如何阅读
  • ES6系列

  • 模块化

  • 正则表达式

  • 单元测试

  • 微前端

  • 实用函数

  • Rollup

  • 解决方案

  • 《JavaScript》笔记
  • underscore系列
Jamey
2021-11-17
目录

underscore 的源码该如何阅读?

# underscore 的源码该如何阅读?

# 📖. 前言

别名:《underscore 系列 8 篇正式完结!》

# 一. 起因

想先聊聊为什么会写 underscore 系列?

最一开始写 JavaScript 专题系列的时候,因为涉及到去重、扁平等功能点的实现,所以就研究了 underscore 中的实现方式,后来写完专题系列,有朋友就问我该如何组织这些功能函数呢?

说起来,我也有这样的困惑,因为以前在技术平台上也看到过一些分享自己常用功能函数的文章,每当这个时候,总会幻想如果有篇文章能讲讲自己如何组织代码,然后我学会后,在业务中不断总结完善,或许我也能写出自己的工具函数库。

临渊羡鱼,不如退而结网,所以我想研究下 underscore 的代码如何组织的,后来又觉得反正都看了一遍,再进一步,讲讲 underscore 的源码吧。

不过,这个系列的内容跟一般讲解 underscore 源码的系列文章还是有很大的不同,主要在于它讲的算是很 “边缘” 的内容,从文章的标题中也可以看出,讲完代码结构后,讲了内部函数、模板引擎,工具函数等这些并不是实际开发中常用到的 API,即便是在其他的系列文章中,这也算是很冷门的东西,不过这也整好印证了我写的 underscore 系列的目的,就是帮助大家更好的阅读源码。

所以它与其他 underscore 系列的文章并不冲突,完全可以在阅读完这个系列后,再跟着其他系列的文章接着学习。

# 二. 如何阅读

我在写 underscore 系列的时候,被问的最多的问题就是该怎么阅读 underscore 源码?我想简单聊一下自己的思路。

首先,underscore 的定位是一个功能函数库,提供了 110 多个 API 帮助开发,所以首先要搞明白的就是那么多的函数,是如何组织的?是如何做到既可以直接使用,又能以面向对象的方式使用的?又是如何实现链式调用的? 了解了如何组织代码,甚至从中抽离得到一个模板,我们再从业务中慢慢总结,最终也能写出自己的 underscore。

接下来是阅读内部函数,其实不多,只有 cb、optimizeCb、restArgs、shallowProperty、deepGet 而已,之所以阅读这些函数的实现,是因为在读其他 API 时很可能会接触到这些函数, 我第一次在其他 API 中看到 cb、optimizeCb、restArgs 函数时都是一脸懵逼,接着看 API 吧,总觉得这点没看懂,心里一直很不爽,转而去看这些函数的实现,又因为只读了一点源码,想不明白为什么要这样抽象, 进退两难,慢慢的就产生了挫败感,这也就是我为什么会专门写了两篇介绍内部函数,不仅仅是讲解源码,更重要的是希望大家明白为什么要这么抽象。

最后就是跟着兴趣学习,underscore API 众多,一个一个看实在是消磨热情,倒不如你想了解哪个功能就去研究哪个功能的实现,如果说在这部分有什么建议的话,那就是在研究一些函数具体的实现方式时, 可以参考一些已经写过的源码分析的文章,也许事半功倍:

  1. 吴晓军源码分析系列 (opens new window)
  2. 韩子迟源码分析系列 (opens new window)

当然啦,即便如此,阅读源码的过程也并不是一帆风顺,总会因为各种原因,放弃又重新拾起,又放弃又重新拾起,很正常,我也没有什么好的方法,只能说保持一个平和的心态就是一种进步。

#JavaScript underscore
上次更新: 2022/07/01, 17:34:19
underscore 系列之字符实体与 _.escape
ES6 系列之 let 和 const

← underscore 系列之字符实体与 _.escape ES6 系列之 let 和 const→

Theme by Vdoing | Copyright © 2017-2023 Jamey | blog 闽ICP备19022664号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式