掘友等级
获得徽章 12
Class 可以通过extends关键字实现继承,让子类继承父类的属性和方法。extends 的写法比原型链继承,要清晰方便很多。ES6 中子类必须在constructor()方法中调用super(),否则就会报错。这是因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,添加子类自己的实例属性和方法。如果不调用super()方法,子类就得不到自己的this对象。
constructor() 方法是类的默认方法,通过 new 命令生成对象实例时,自动调用该方法。一个类必须有 constructor() 方法,如果没有显式定义,一个空的 constructor() 方法会被默认添加。constructor() 方法默认返回实例对象(即this),完全可以指定返回另外一个对象。类必须使用 new 调用,否则会报错。这是它跟普通构造函数的一个主要区别,后者不用 new 也可以执行。
Promise.reject(reason) 方法也会返回一个新的 Promise 实例,实例的状态为rejected。Promise.reject() 方法的参数,会原封不动地作为 reject 的理由,变成后续方法的参数。
有时候我们需要将现有对象转为 Promise 对象,此时 Promise.resolve() 方法就起到这个作用。Promise.resolve()方法的参数分成四种情况,如果参数是 Promise 实例,那么Promise.resolve 将不做任何修改、原封不动地返回这个实例;如果参数是一个 thenable 对象,Promise.resolve() 方法会将这个对象转为 Promise 对象,然后就立即执行 thenable 对象的then()方法;如果参数不是具有then()方法的对象,或根本就不是对象, Promise.resolve() 方法返回一个新的 Promise 对象,状态为 resolved ;如果不带有任何参数,Promise.resolve()方法允许调用时不带参数,直接返回一个 resolved 状态的 Promise 对象;所以,希望得到一个 Promise 对象,比较方便的方法就是直接调用 Promise.resolve() 方法。
Promise.any()方法,接受一组 Promise 实例作为参数,包装成一个新的 Promise 实例返回。只要参数实例有一个变成 fulfilled 状态,包装实例就会变成 fulfilled 状态;如果所有参数实例都变成 rejected 状态,包装实例就会变成 rejected 状态。Promise.any() 跟 Promise.race() 方法很像,只有一点不同,就是 Promise.any() 不会因为某个 Promise 变成 rejected 状态而结束,必须等到所有参数 Promise 变成 rejected 状态才会结束。
有时候,我们希望等到一组异步操作都结束了,不管每一个操作是成功还是失败,再进行下一步操作。为了解决这个问题,ES2020 引入了 Promise.allSettled() 方法,用来确定一组异步操作是否都结束了(不管成功或失败)。它的名字叫做 Settled ,包含了 fulfilled 和 rejected 两种情况。Promise.allSettled()方法接受一个数组作为参数,数组的每个成员都是一个 Promise 对象,并返回一个新的 Promise 对象。只有等到参数数组的所有 Promise 对象都发生状态变更(不管是fulfilled还是rejected),返回的 Promise 对象才会发生状态变更。
Promise.race()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。Promise.race()方法的参数与 Promise.all() 方法一样,如果不是 Promise 实例,就会先调用下面讲到 Promise.resolve() 方法,将参数转为 Promise 实例,再进一步处理。
Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。如果作为参数的 Promise 实例,自己定义了 catch 方法,那么它一旦被 rejected ,并不会触发 Promise.all() 的 catch 方法。
Promise.prototype.catch() 方法是 .then(null, rejection) 或 .then(undefined, rejection) 的别名,用于指定发生错误时的回调函数。Promise 对象后面要跟 catch() 方法,这样可以处理 Promise 内部发生的错误。catch() 方法返回的还是一个 Promise 对象,因此后面还可以接着调用 then() 方法。
Promise 实例具有then方法,then方法是定义在原型对象Promise.prototype上的。它的作用是为 Promise 实例添加状态改变时的回调函数。then方法的第一个参数是resolved状态的回调函数,第二个参数是rejected状态的回调函数,它们都是可选的。
下一页