axios这个“AD”有哪些辅助?

96 阅读2分钟

「我正在参与掘金会员专属活动-源码共读第一期,点击参与

本篇文章介绍的是axios的辅助 —— 工具函数。

拉取源码

git clone https://github.com/axios/axios.git
  • 普通工具:在/lib/utils.js目录下
  • 具有特定功能的工具:在lib/helpers目录下

工具分类

我们按照用途分类

  • isXXX(): 判断是否属于xx类型

这里作者还对typeofObject的原型方法toString进行了封装。 这些连续的箭头函数很巧妙,可以临时保存函数在某个阶段的状态。kindof还做了优化,如果有命中了缓存就直接取缓存的值。

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

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

const kindOfTest = (type) => {
  type = type.toLowerCase();
  return (thing) => kindOf(thing) === type
}

下面就归集一下isXXX()类别的方法:

  • isUndefined
  • isBufferisArrayBufferisArrayBufferViewisTypedArray
  • isStringisNumberisObjectisBooleanisPlainObjectisDateisRegExp
  • isFileisBlobisFileListisStreamisFormDataisURLSearchParamsisHTMLForm

下面归集的是其他类别的方法:

  • trim: 如果字符串本身具有trim直接使用,没有的话就使用正则
  • forEach: 将传入的不具备循环条件的obj转换为可循环的类型-数组;如果是对象则遍历它的key
  • findKey:通过Object.keys()来获取所有的key,然后过滤出符合条件的。
  • merge: 对象属性合并
  • extend: 拷贝对象属性
  • stripBOM: 剔除BOM
  • inherits: 构造方法
  • toFlatObject: 扁平化对象
  • endsWith: 一个字符串是否以特定字符结尾
  • toArray: 转换数组-类似arrify
  • forEachEntry: 迭代对象的keyvalue
  • matchAll: 将所有匹配的结果以数组返回
  • toCamelCase: 转换为驼峰
  • freezeMethods: 将对象的方法都冻结,只读
  • toObjectSet: 将对象转换为Set
  • toFiniteNumber: 转化为有限数字
  • toJSONObject:转换为JSON对象

结束语

这是axios的普通工具类函数,工具函数就好像是“辅助”一样,在axios实现什么逻辑的时候都离不开这些“辅助”的助攻。我们如果在不清楚这个工具函数具体的用处时,可以到调用的位置,看它干了些啥。就像我们背英语单词,如果不知道它存在的意义,就去语境中去理解它一样。