别名:《underscore 系列 8 篇正式完结!》git
underscore 系列是我写的第三个系列,前两个系列分别是 JavaScript 深刻系列、JavaScript 专题系列。github
这个系列算是 JavaScript 专题系列的番外篇,总共写了 8 篇,重点介绍了 underscore 中的代码组织、链式调用、内部函数、模板引擎、工具函数等内容,旨在帮助你们阅读源码,以及写出本身的 undercore。api
顺便宣传一下该博客的 Github 仓库:https://github.com/mqyqingfeng/Blog,欢迎 star,鼓励一下做者。函数
想先聊聊为何会写 underscore 系列?工具
最一开始写 JavaScript 专题系列的时候,由于涉及到去重、扁平等功能点的实现,因此就研究了 underscore 中的实现方式,后来写完专题系列,有朋友就问我该如何组织这些功能函数呢?源码分析
提及来,我也有这样的困惑,由于之前在技术平台上也看到过一些分享本身经常使用功能函数的文章,每当这个时候,总会幻想若是有篇文章能讲讲该如何组织代码,而后我学会后,在业务中不断总结完善,或许我也能写出本身的工具函数库。学习
临渊羡鱼,不如退而结网,因此我想研究下 underscore 的代码是如何组织的,后来又以为反正都看了一遍,再进一步,讲讲 underscore 的源码吧。rest
不过,这个系列的内容跟通常讲解 underscore 源码的系列文章仍是有很大的不一样,主要在于它讲的算是很"边缘"的内容,从文章的标题中也能够看出,讲完代码结构后,讲了内部函数、模板引擎,工具函数等这些并非在实际开发中经常使用到的 API,即使是在其余的系列文章中,这些也算是很冷门的内容,不过这也正好印证了我写 underscore 系列的目的,就是帮助你们更好的阅读源码。对象
因此它与其余 underscore 系列的文章并不冲突,彻底能够在阅读完这个系列后,再跟着其余系列的文章接着学习。模板引擎
我在写 underscore 系列的时候,被问的最多的问题就是该怎么阅读 underscore 源码?我想简单聊一下本身的思路。
首先,underscore 的定位是一个功能函数库,提供了 110 多个 API 帮助开发,因此首先要搞明白的就是那么多的函数,是如何组织的?是如何作到既能够直接使用,又能以面向对象的方式使用的?又是如何实现链式调用的?了解了如何组织代码,甚至从中抽离获得一个模板,咱们再从业务中慢慢总结,最终也能写出本身的 underscore。
接下来是阅读内部函数,其实很少,只有 cb、optimizeCb、restArgs、shallowProperty、deepGet 而已,之因此阅读这些函数的实现,是由于在读其余 API 时极可能会接触到这些函数,我第一次在其余 API 中看到 cb、optimizeCb、restArgs 函数时都是一脸懵逼,接着看 API 吧,总以为这点没看懂,内心一直很不爽,转而去看这些函数的实现,又由于只读了一点源码,想不明白为何要这样抽象,进退两难,慢慢的就产生了挫败感,这也就是我为何会专门写了两篇介绍内部函数,不只仅是讲解源码,更重要的是但愿你们明白为何要这么抽象。
最后就是跟着兴趣学习,underscore API 众多,一个一个看实在是消磨热情,倒不如你想了解哪一个功能就去研究哪一个功能的实现,若是说在这部分有什么建议的话,那就是在研究一些函数具体的实现方式时,能够参考一些已经写过的源码分析的文章,也许事半功倍:
固然啦,即使如此,阅读源码的过程也并非一路顺风,总会由于各类缘由,放弃又从新拾起,又放弃又从新拾起,很正常,我也没有什么好的方法,只能说保持一个平和的心态就是一种进步。
按照原定的计划,是准备写 ES6 系列的,不过,由于工做的缘由,极可能会先写 React 系列,暂时还不能肯定,今年只但愿能写完最后两个系列。
感谢你们的阅读和支持,我是冴羽,下个系列再见啦![]~( ̄▽ ̄)~**