实现axios
function axios({ method, url, params, data }) {    return new Promise((resolve, reject) => {        method = method.toUpperCase()        //1.创建对象        const xhr = new XMLHttpRequest();        //2.初始化        let str = '';        for (let k in params) {            str += `${k}=${params[k]}&`;        }        if (str) {            url = url + '?' + str.slice(0, -1);        }        xhr.open(method, url);        //3.发送        if (method === 'POST' || method === 'PUT' || method === 'DELETE') {            xhr.setRequestHeader('Content-type', 'application/json;charset=utf-8')            //设置请求体            xhr.send(JSON.stringify(data))        } else {            xhr.send();        }        //4.处理结果        xhr.onreadystatechange = function () {            if (xhr.readyState === 4) {                if (xhr.status >= 200 && xhr.status < 300) {                    resolve({                        status: xhr.status,                        message: xhr.statusText,                        body: JSON.parse(xhr.response)                    })                } else {                    reject(new Error('request error status is ' + xhr.status))                }            }        }    })}axios.get = function (url, options) {    return axios(Object.assign(options, { url, method: 'get' }))}//post delete put 同// // 使用形式: axios({     url: 'https://api.apiopen.top/getJoke',     method: 'GET',     params: {         a: 1,         b: 2     },     data: {         a: 2,         b: 4     } }).then(     response => {         console.log(response)     }).catch(error => {         console.log(error)     })// 使用形式:axios.get('https://api.apiopen.top/getJoke', {    params: {        a: 1,        b: 2    }}).then(    response => {        console.log(response)    }).catch(error => {        console.log(error)    })
面试官:Vue项目中有封装过axios吗?怎么封装的?