原型和原型链、ajax、fetch、axios三者的区别、箭头函数和普通函数的区别
原型和原型链
原型prototype:
js在声明构造函数的时候,会在内存中生成一个对象,这个对象就是该函数的原型对象。
原型对象上有个constructor属性,指向它的构造函数;
构造函数拥有一个prototype属性,该属性指向的是它的原型对象。
通过构造函数实例化出来的对象并没有prototype属性,但是拥有隐式原型__proto__属性,该属性指向此对象的构造函数的原型对象。//x.__proto__===X.prototype
原型链:当一个实例化对象在查找一个属性或方法时,如果自身没有,则会通过隐式原型__proto__去查找它的构造函数的原型对象,如果此原型对象上也没有,则会寻找更上一级的原型对象,直到最后找到为止,在这个一层一层向上查找的过程中形成的链式结构就是原型链。
!!!原型对象xxx.prototype上可放入公有的属性和方法,实例化对象即可自由取用。
!!!原型链的源头为Object.prototype,它的隐式原型__proto__指向的是null。
ajax、fetch、axios三者的区别
ajax:这个一种网页局部刷新技术,它是基于XHR(XMLHttpRequest)开发的,针对于MVC架构模式
fetch: ES6的新的api,使用原生js进行开发,没有采用XHR,是基于Promise的。
特点:
1.fetch只对网络请求报错,400和500都当作成功处理,需要进一步封装处理
2.fetch默认不携带cookie,需要添加配置项
3.fetch不支持中止和超时控制
4.fetch无法原生检测请求进度,但是XHR可以
axios:基于Promise对XHR二次封装的请求库,在浏览器端创建XMR,在nodejs中使用http模块
特点:
1.axios支持Promise API
2.axios从浏览器创建XHR,在nodejs中使用http模块
3.axios可以自动转换json对象
4.axios可以支持请求拦截(日志或权限)和响应拦截(格式化内容)
5.支持中止和超时控制
6.支持CRSF保护。
三者对比:
·早期出现的XMLHttpRequest,使得javascript可以异步发送请求,这项异步技术就是ajax
·jQuery封装了ajax,使得异步处理结果可以通过回调显示,但是出现了回调地狱
·为了解决回调地狱问题,Promise应运而生
·axios就是基于Promise二次封装了XHR,这是一个第三方的请求库,在浏览器创建XHR,在nodejs中使用http模块
·fetch出现在ES6时期,这是使用原生js开发出来的API,天生自带Promise
箭头函数和普通函数区别
1.定义方式:箭头函数使用箭头定义,普通函数使用关键词定义
2.构造函数:箭头函数不能用于构造函数,普通函数可以构造函数创建对象实例
3.1.this指向:箭头函数没有具体的this指向,依赖于父级普通函数的this指向;普通函数的this指向的是调用该函数的对象
3.2.this指向修改:箭头函数的this指向无法修改,call()、apply()、bind()方法无法修改箭头函数this指向
4.arguments参数:箭头函数无法使用arguments参数,确认代之的是res参数的...;普通函数可以使用arguments参数
5.prototype原型:箭头函数不具有prototype原型,普通函数具有
6.Generator函数:箭头函数不能Generator函数,无法使用yield关键字;普通函数可以

浙公网安备 33010602011771号