摘要:所以它与其他系列的文章并不冲突,完全可以在阅读完这个系列后,再跟着其他系列的文章接着学习。如何阅读我在写系列的时候,被问的最多的问题就是该怎么阅读源码我想简单聊一下自己的思路。感谢大家的阅读和支持,我是冴羽,下个系列再见啦
前言
别名:《underscore 系列 8 篇正式完结!》
介绍underscore 系列是我写的第三个系列,前两个系列分别是 JavaScript 深入系列、JavaScript 专题系列。
这个系列算是 JavaScript 专题系列的番外篇,总共写了 8 篇,重点介绍了 underscore 中的代码组织、链式调用、内部函数、模板引擎、工具函数等内容,旨在帮助大家阅读源码,以及写出自己的 undercore。
顺便宣传一下该博客的 Github 仓库:https://github.com/mqyqingfeng/Blog,欢迎 star,鼓励一下作者。
起因想先聊聊为什么会写 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 众多,一个一个看实在是消磨热情,倒不如你想了解哪个功能就去研究哪个功能的实现,如果说在这部分有什么建议的话,那就是在研究一些函数具体的实现方式时,可以参考一些已经写过的源码分析的文章,也许事半功倍:
吴晓军源码分析系列
韩子迟源码分析系列
当然啦,即便如此,阅读源码的过程也并不是一帆风顺,总会因为各种原因,放弃又重新拾起,又放弃又重新拾起,很正常,我也没有什么好的方法,只能说保持一个平和的心态就是一种进步。
全目录underscore 系列之如何写自己的 underscore
underscore 系列之链式调用
underscore 系列之内部函数 cb 和 optimizeCb
underscore 系列之内部函数 restArgs
underscore 系列之防冲突与 Utility Functions
underscore 系列之实现一个模板引擎(上)
underscore 系列之实现一个模板引擎(下)
underscore 系列之字符实体与 _.escape
下期预告按照原定的计划,是准备写 ES6 系列的,不过,因为工作的原因,很可能会先写 React 系列,暂时还不能确定,今年只希望能写完最后两个系列。
感谢大家的阅读和支持,我是冴羽,下个系列再见啦![]~( ̄▽ ̄)~**
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/93946.html
摘要:最近开始看源码,并将源码解读放在了我的计划中。今天就跟大家聊一聊中一些常用类型检查方法,以及一些工具类的判断方法。用是否含有属性来判断工具类判断方法接下来看下一些常用的工具类判断方法。 Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中。 阅读一些著名框架类库的源码,就好像和一个个大师对话...
摘要:最近开始看源码,并将源码解读放在了我的计划中。将转为数组同时去掉第一个元素之后便可以调用方法总结数组的扩展方法就解读到这里了,相关源码可以参考这部分。放个预告,下一篇会暂缓下,讲下相关的东西,敬请期待。 Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中。 阅读一些著名框架类库的源码,就好...
摘要:今天要讲的是,如何在数组中寻找元素,对应中的,,,以及方法。如果往一个有序数组中插入元素,使得数组继续保持有序,那么这个插入位置是这就是这个方法的作用,有序,很显然用二分查找即可。 Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中。 阅读一...
摘要:最近开始看源码,并将源码解读放在了我的计划中。像和使用内置构造函数所创建的对象都会继承自和的不可枚举属性,例如的方法或者的方法。循环将迭代对象的所有可枚举属性和从它的构造函数的继承而来的包括被覆盖的内建属性。 Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中。 阅读一些著名框架类库的源码...
摘要:今天要讲的是数组展开以及和数组展开息息相关的一个重要的内部方法。也是个布尔值,当为并且也为时,能过滤参数元素中的非数组元素。首先并不需要对数组深度展开,其次传入的是数组,对于非数组元素可以直接忽略。 Why underscore (觉得这一段眼熟的童鞋可以直接跳到正文了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 201...
阅读 1652·2021-11-19 09:40
阅读 2907·2021-09-24 10:27
阅读 3200·2021-09-02 15:15
阅读 1856·2019-08-30 15:54
阅读 1182·2019-08-30 15:54
阅读 1350·2019-08-30 13:12
阅读 605·2019-08-28 18:05
阅读 2773·2019-08-27 10:53