ES6 与 class “类”`
## class类
Es5如果要要生成一个对象实例,,需要先定义一个构造函数,然后通过new操作符来完成。
Es6引入clss“类”这个概念通过class关键字可以定义累
## ES5中的继承 (组合继承:原型链继承 + 借用构造函数)
原型链继承:
1.父类的实例作为子类的原型
借用构造函数继承:
2在子类内,使用call()调用父类方法,并将父类的this修改为子类的this.
相当于是把父类的实例属性复制了一份放到子类的函数内.
组合继承:
3.既能调用父类实例属性,又能调用父类原型属性
一、ES6中的class继承
1. class相当于es5中的构造函数
2. class中定义方法时,前后不能加function,全部定义在class的prototype属性中
3. class中定义的所有方法是不可枚举的
4. class中只能定义方法,不能定义对象,变量等
5. class和方法内默认都是严格模式
6. class中子类通过extends继承父类
7. es5中constructor为隐式属性
Javascript 原型链与原型
每一个构造函数下都有一个prototype叫做显性原型
每一个实例都有一个 --proto--叫做隐式原型
实例是隐式原型 构造函数是显示原型
consturctor
每个prototype原型都有一个consturctor属性指向他关联的构造函数
constructor方法是类的构造函数的默认方法,通过new命令生成对象实例时,自动调用该方法。
constructor方法如果没有显式定义,会隐式生成一个constructor方法。
所以即使你没有添加构造函数,构造函数也是存在的。constructor方法默认返回实例对象this,
但是也可以指定constructor方法返回一个全新的对象,让返回的实例对象不是该类的实例。
原型链
获取对象属性时如果对象本身没有这个属性,那就会去他的原型--proto--上去找如果还找不到就去找
原型的原型一直找到最顶(object.prototype)为止object.prototype对象也有--proto--属性值为null
Promise是什么
Promise 是异步编程的一种解决方案,其实是一个构造函数,
自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。
promise是异步编程解决方案
1. 主要用于异步计算
2. 可以将异步操作队列化 按预期的顺序执行
3. 用链式 .then 解决回调地狱问题
4. 无法取消 一旦创建就会立即执行 中途无法取消
5. 代码好维护
promise的构造函数有两个参数 一个是resolve 用.then 接收 另一个是reject 用.catch 接收
## Promise的两个特点和三大状态
|特点|
1.Promise对象的状态不受外界影响
Promise的状态一旦改变,就不会再变,任何时候都可以得到这个结果,状态不可以逆,只能由 pending变成fulfilled或者由pending变成rejected
|状态|
(1)pending 初始状态
(2)fulfilled 成功状态
(3)rejected 失败状态
reject的用法
以上是对promise的resolve用法进行了解释,相当于resolve是对promise成功时候的回调,它把promise的状态修改为fullfiled,那么,reject就是失败的时候的回调,他把promise的状态修改为rejected,这样我们在then中就能捕捉到,然后执行“失败”情况的回调。
catch的用法
与Promise对象方法then方法并行的一个方法就是catch,与try catch类似,catch就是用来捕获异常的,
也就是和then方法中接受的第二参数rejected的回调是一样的
all的用法
与then同级的另一个方法,all方法,该方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后并且执行结果都是成功的时候才执行回调。
race的用法
all是等所有的异步操作都执行完了再执行then方法,那么race方法就是相反的,谁先执行完成就先执行回调。先执行完的不管是进行了race的成功回调还是失败回调,其余的将不会再进入race的任何回调
Promise Apl
then()方法
then 方法就是把原来的回调写法分离出来,在异步操作执行完后,用链式调用的方式执行回调函数。