Comments (6)
目标修订
经过多天的不懈奋战,我终于成功的放弃jQuery源码。这是我第一次阅读工具库源码,我决定更换一个简单一点的工具库源码来阅读,这次我选择的是underscore。underscore代码更加少,多是实现一些常用功能的API,有利于我理解源码,学习如何写简单的轮子,从这个库开始我的源码阅读之路。
from mymemorandum.
学习笔记
underscore.js源码中,有一个基础函数——_.isObject(){},源码如下:
// Is a given variable an object? _.isObject = function(obj) { var type = typeof obj; return type === 'function' || type === 'object' && !!obj; };
该函数用于判断传入的参数是否是一个非空对象,所以我们看到函数的返回值除了前半部分的type === 'function' || type === 'object'
之外,还有后半部分的判断。
经查阅,双感叹号表示将参数转化为Boolean值,转化后的值与Boolean()函数的转化效果一样。之所以要这么转化一下,就是为了防止传入的参数是null值,确保我们判断的值是一个非空对象(可以是Object,Array, Function等等)。
from mymemorandum.
最新进度
最近一直在阅读源码,顺序阅读,难免有些乏味。为了增加阅读兴趣以及方便总结学习笔记,我决定参照API手册,然后针对功能类似的API阅读它们的源码,然后总结自己的经验。
计划
-
判断JavaScript类型的API源码总结:
- isArray
- isObject
- isFunction
- isString
- isNumber
- isBoolean
- isDate
- isRegExp
- isNaN
- isNull
- isUndefined
-
判断特殊类型的API源码总结:
- isEqual
- isFinite
- isEmpty
- isElement
- isArguments
第一部分类型判断已经写完。
_.isEqual函数有一点难度,这两天都在阅读,希望能提交PR。
- 2018.03.04 终于看完了_.isEqual部分,并且写完了学习笔记。
- 2018.03.05 学习完了_.debounce函数,基本掌握,并且写好了学习笔记。
- 2018.03.06 发布在掘金的学习笔记收到了很多“喜欢”,非常开心!再接再厉!
由于今天开始实习了,所以没有阅读多久的underscore的源码,希望明天能把
throttle函数的解析写出来。
from mymemorandum.
最新进度
- 2018.03.10 这一周基本都在实习,没有什么时间阅读underscore源码,今天发表了一篇文章。
已完成——《理解underscore中的去抖函数》、《理解underscore中的节流函数》
明天任务:函数部分的解读,包括partial、once、before、after、bind等。 - 2018.03.11 今天写了工具函数restArgs的理解文章,虽然阅读了partial、once、before、bind的源码,但是还没来得及写文章,关于executeBound函数的理解还不够透彻,必须理解好了再写笔记。
- 2018.03.22 前几天写了_.bind的阅读笔记,这几天忙于公司的第一个sprint,没什么时间阅读源码。
- 2018.03.31 三月已经快结束了,忙于工作一直没有更新,下一步目标是解读数组处理函数。包括flatten、without、difference等。
- 2018.04.01 今天学习收获很大,完成了uniq数组去重函数源码的阅读,然后完成了数组求交并差集的源码阅读,并且写了两篇笔记。
from mymemorandum.
最新进度
毕设已经基本完成,接下来准备对论文进行小修小改,以及准备答辩,时间比之前更充裕,准备不时写一些underscore源码阅读笔记。
下一步任务:
_.template模板引擎架构设计深入了解webpack:smile:手动搭建react开发环境- 手动搭建Vue开发环境
写一个微小的create-react-app
from mymemorandum.
结语
Underscore基本都已经解读完毕,接下来准备毕设答辩,要准备PPT什么的了,以后大概也不会再解读Underscore源码了,主要转向其它知识的学习。
from mymemorandum.
Related Issues (13)
- 最近计划(Node爬虫)——2018.02.03 HOT 8
- 异步组件和webpack优化 HOT 1
- 最近学习计划
- scoped css 无效 HOT 3
- 学习计划
- 最近计划(Express + React)——2018.02.13 HOT 1
- 最近计划(Parcel + async/await)——2018.02.13 HOT 3
- 最近计划(Node Stream)——2018.02.14 HOT 1
- 最近计划(Python学习)——2018.03.14 HOT 5
- 并行学习任务——排序算法以及算法的复杂度 HOT 3
- 明天答辩啦! HOT 2
- 最近计划(Linux学习)——2018.06.11 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mymemorandum.