axios的用法请参考: https://www.kancloud.cn/yunye...

明天剖析axios的入口文件lib下的axios.js,如下图:

文件结尾引入了一些辅助性的办法和对象:
utils: 次要是一些验证函数,比方isNumber isString isFunction isBuffer这种,
bind: 一个闭包函数

module.exports = function bind(fn, thisArg) {  return function wrap() {    var args = new Array(arguments.length);    for (var i = 0; i < args.length; i++) {      args[i] = arguments[i];    }    return fn.apply(thisArg, args);  // fn的作用域中能够拿到thisArg中的属性和办法  };};

Axios: axios的构造函数.就是说咱们用的axios({})是Axios的一个实例
mergeConfig: 一个函数,用来合并配置,就是将咱们传入的配置和默认配置合并
defaults: 默认对象.

文件内有一个创立实例的办法,以往的构造函数是间接用new关键字创立实例,axios应用这个:

/** * 创立axios实例 * * @param {Object} defaultConfig 实例的默认配置 * @return {Axios} 返回一个新的实例 */function createInstance(defaultConfig) {  var context = new Axios(defaultConfig); // axios的构造函数的实例  // console.log('context',typeof context);  var instance = bind(Axios.prototype.request, context); // 一个闭包,返回一个函数  第一个参数是办法,第二个是失常参数,调用instance时参数将传给Axios.prototype.request,将this指向context                                                        // 也就是axios({}),咱们传的对象传给了request  // 将Axios.prototype的属性和属性值变成instance的属性和属性值  并返回instance  utils.extend(instance, Axios.prototype, context);  // 将context复制给实例  utils.extend(instance, context);  //  将context的属性赋给instance,再将值通过bind给了instance  return instance; // 是一个函数   axios({})就是instance({})}// 创立默认的实例var axios = createInstance(defaults); // defaults一个大的对象. 各种配置

而后给实例axios增加属性:

// 公开 Axios 类并容许类继承  axios曾经是一个实例, 又增加了一个Axios属性,值是一个构造函数axios.Axios = Axios;// 增加一个工厂用来创立新的实例axios.create = function create(instanceConfig) {  return createInstance(mergeConfig(axios.defaults, instanceConfig)); // createInstance办法的返回值};// 公开 Cancel & CancelTokenaxios.Cancel = require('./cancel/Cancel');axios.CancelToken = require('./cancel/CancelToken');axios.isCancel = require('./cancel/isCancel');// 公开 all/spreadaxios.all = function all(promises) {  return Promise.all(promises); // Promise.all()办法用于将多个 Promise 实例,包装成一个新的 Promise 实例};axios.spread = require('./helpers/spread');// 公开 isAxiosErroraxios.isAxiosError = require('./helpers/isAxiosError');module.exports = axios;// 容许应用模块化的default语法module.exports.default = axios;