1、在實例對象上添加兩個屬性:default(默認配置)? 與 interscptors
// //構造函數function Axios(config) {//初始化this.defaults = config;//為了創建 default 默認屬性this.interceptors = {request: {},response: {}}}
2、在原型對象上添加方法
//原型添加相關的方法Axios.prototype.request = function (config) {console.log('發送 AJAX 請求 請求的類型為 ' + config.method);}Axios.prototype.get = function (config) {return this.request({ method: 'GET' });}Axios.prototype.post = function (config) {return this.request({ method: 'POST' });}
3、通過bind方法,將實例對象中的屬性與方法添加到instance中,并將instance返回,實現將axios當作對象或方法使用。
//聲明函數function createInstance(config) {//實例化一個對象let context = new Axios(config);// context.get() context.post() 但是不能當做函數使用 context() X//創建請求函數let instance = Axios.prototype.request.bind(context);// instance 是一個函數 并且可以 instance({}) 此時 instance 不能 instance.get X//將 Axios.prototype 對象中的方法添加到instance函數對象中Object.keys(Axios.prototype).forEach(key => {instance[key] = Axios.prototype[key].bind(context);// this.default this.interceptors});// //為 instance 函數對象添加屬性 default 與 interceptorsObject.keys(context).forEach(key => {instance[key] = context[key];});return instance;}let axios = createInstance();axios.get({});axios.post({});