axios源码中的这些实用的基础工具函数(上)

之前总觉得阅读源码是一件很了不起的事情,是只有大佬才会去做的事。但在工作了一段时间后,使用了很多的优秀的框架和库后,在感叹巧妙的设计之余——有时候也会想作者到底是怎么去实现的。于是就开始尝试阅读一些源码,发现其实源码也不是想象的那么难,至少有很多看得懂。

同时,源码有也有很多值得学习和借鉴的东西,不管是应用到日常开发中还是应对面试都是非常有用的,所以还是推荐大家也去尝试阅读的。

前言

这是我的阅读源码的第二篇文章,逐渐培养每周阅读源码并写文章记录的习惯。

axios 是我们平时经常用到的网络请求库,可以同时用于 浏览器和node.js 环境中。今天我们来阅读 axios 源码,来了解其中的封装的工具函数。

如何阅读 github 上的源码

打开 axios 即可查看源码

在每一个github项目中的url里直接加上1s,就能在网页版vscode中查看源码了。(我在上面提供的链接已经添加了 1s

如果这个方法不可行的话,还可以使用下面的方法把源码克隆到本地中进行查看。

克隆 axios 项目查看源码

开源项目一般能在根目录下的README.md文件或CONTRIBUTING.md中找到贡献指南。贡献指南中说明了参与贡献代码的一些注意事项,比如:代码风格、代码提交注释格式、开发、调试等。

axios 中的工具函数

axios 的工具函数都在 utils.js 这个文件中,我们在平时也可以学习开源库的命名习惯,把工具函数放到 utils.js 文件中。

axios 源码的utils.js文件中有很多的工具函数,为了方便大家阅读,我将文章分为上、下两部分,本文是上半部分,介绍的是 axios 实现工具函数依赖的基本函数,还有工具函数中判断数据类型的函数下半部分,介绍的是 axios 工具函数中的非常重要且可以用于日常开发中的函数。如:mergeextendforEach等。

基础函数

先介绍几个基础函数,这几个函数会在后面的工具函数频繁使用。

typeOfTest 使用 typeOf 获取当前数据类型

const typeOfTest = type => thing => typeof thing === type; 

kindOf 获取当前数据类型

这个函数的实现原理是使用Object.prototype.toString()可以获取数据类型的特性。

var toString = Object.prototype.toString;

var o = new Object();o.toString(); // 返回 [object Object]
toString.call(new Date); // [object Date]
toString.call(Math); // [object Math] 
const {toString} = Object.prototype;

const kindOf = (cache => thing => {const str = toString.call(thing);// [object Object]return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());}
)(Object.create(null));
// 返回值为 object / array ... 

注意:这里使用的是Object.create(null),而不是 {}。我开始以为作者是出于性能的考虑,或者只是一个编程的习惯。然后我就试着去搜索了一下,于是发现了这篇文章详解Object.create(null)

我阅读了这篇文章,总结了使用Object.create(null)的原因:

  • Object.create(null)创建的对象是一个纯净的对象,不包含object原型链上面的属性,可以自定义其中的属性
  • <
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值