实现:json
function myNew() { // 1.建立空对象 let obj = {} let constructor = [...arguments][0] let params = [...arguments].slice(1) // 2.空对象的原型指向构造函数的原型 obj.__proto__ = constructor.prototype // 3.执行构造函数的代码 var ret = constructor.apply(obj, params) // 4.判断返回值类型: // 若是是基本值类型,则返回的建立的'空对象' // 若是是引用类型,则返回这个引用类型的对象 var flag = ret && ret instanceof Object return flag ? ret : obj } // test function A(name) { this.name = name } var a1 = myNew(A, 'Lee') var a2 = new A('Lee') console.log(a1, a2)
AJAX 包括如下几个步骤promise
通常实现:服务器
const SERVER_URL = '/server' let xhr = new XMLHttpRequest() // 建立 Http 请求 第三个参数为async,指定请求是否为异步方式,默认为 true。 xhr.open('GET', SERVER_URL, true) // 设置请求头信息 xhr.responseType = 'json' xhr.setRequestHeader('Accept', 'application/json') // 设置状态监听函数 xhr.onreadystatechange = function () { if (this.readyState !== 4) return // 当请求成功时 if (this.status === 200) { handle(this.responseText) } else { console.error(this.statusText) } } // 设置请求失败时的监听函数 xhr.onerror = function () { console.error(this.statusText) } // 发送 Http 请求 xhr.send(null)
promise 封装实现:app
function getJSON(url) { // 返回一个 promise 对象 return new Promise(function (resolve, reject) { let xhr = new XMLHttpRequest() // 新建一个 http 请求, 第三个参数为async,指定请求是否为异步方式,默认为 true。 xhr.open('GET', url, true) // 设置状态的监听函数 xhr.onreadystatechange = function () { /*0: 请求未初始化 1: 服务器链接已创建 2: 请求已接收 3: 请求处理中 4: 请求已完成,且响应已就绪*/ if (this.readyState !== 4) return // 当请求成功或失败时,改变 promise 的状态 /*200: "OK" 404: 未找到页面*/ if (this.status === 200) { resolve(this.responseText) } else { reject(new Error(this.statusText)) } } // 设置响应的数据类型 xhr.responseType = 'json' // 设置请求头信息 xhr.setRequestHeader('Accept', 'application/json') // 发送 http 请求 xhr.send(null) }) }