ES6(Reflect,Promise)
一、Reflect
这里空过了Proxy
1.了解Rflect
用来操作对象的API
- 将
Object
对象的一些明显属于语言内部的方法,放到Reflect
对象上 - 修改某些
Object
方法的返回结果,让其变得更合理
// 老写法
try {Object.defineProperty(target, property, attributes);// success
} catch (e) {// failure
}// 新写法
if (Reflect.defineProperty(target, property, attributes)) {// success
} else {// failure
}
- 让
Object
操作都变成函数行为:命令式转为函数式
// 老写法
'assign' in Object // true// 新写法
Reflect.has(Object, 'assign') // true
2.静态方法
- Reflect.apply(target, thisArg, args)
- Reflect.construct(target, args)
- Reflect.get(target, name, receiver)
var myObject = {foo: 1,bar: 2,get baz() {return this.foo + this.bar;}, }Reflect.get(myObject, 'foo') // 1 Reflect.get(myObject, 'bar') // 2 Reflect.get(myObject, 'baz') // 3
//修改了this指向到新的对象上 var myObject = {foo: 1,bar: 2,get baz() {return this.foo + this.bar;}, };var myReceiverObject = {foo: 4,bar: 4, };Reflect.get(myObject, 'baz', myReceiverObject) // 8
- Reflect.set(target, name, value, receiver)
var myObject = {foo: 1,set bar(value) {return this.foo = value;}, }myObject.foo // 1Reflect.set(myObject, 'foo', 2); myObject.foo // 2Reflect.set(myObject, 'bar', 3) myObject.foo // 3
//修改this var myObject = {foo: 4,set bar(value) {return this.foo = value;}, };var myReceiverObject = {foo: 0, };Reflect.set(myObject, 'bar', 1, myReceiverObject); myObject.foo // 4 myReceiverObject.foo // 1
- Reflect.defineProperty(target, name, desc)
- Reflect.deleteProperty(target, name)
- Reflect.has(target, name)
- Reflect.ownKeys(target)
- Reflect.isExtensible(target)
- Reflect.preventExtensions(target)
- Reflect.getOwnPropertyDescriptor(target, name)
- Reflect.getPrototypeOf(target)
- Reflect.setPrototypeOf(target, prototype)
二、Promise
1.含义
语法上说,Promise 是一个对象:用来解决回调函数
- 可以获取异步操作的消息
- Promise代表一个异步对象
异步操作三种状态:pending
(进行中)、fulfilled
(已成功)和rejected
(已失败)- 从
pending
变为fulfilled
和从pending
变为rejected都叫做已定性:
resolved缺点:
- 一旦新建它就会立即执行,无法中途取消
- 如果不设置回调函数,
Promise
内部抛出的错误,不会反应到外部- 当处于
pending
状态时,无法得知目前进展到哪一个阶段
2. 使用
Promise
对象是一个构造函数,用来生成Promise
实例promise接收函数作为参数,函数包含的参数:
resolve
和reject
resolve:
pending 变成 resolved(也就是fulfilled状态:这里是ES6文章规定)reject:
pending 变成 rejected
const promise = new Promise(function(resolve, reject) {// ... some codeif (/* 异步操作成功 */){resolve(value);} else {reject(error);}
});
then
方法接受两个回调函数参数
- 第一个回调函数是
Promise
对象的状态变为resolved
时调用- 第二个回调函数是
Promise
对象的状态变为rejected
时调用。
promise.then(function(value) {// success
}, function(error) {// failure
});
timeout
方法返回一个Promise
实例,表示一段时间以后才会发生的结果。过了指定的时间(ms
参数)以后,Promise
实例的状态变为resolved
,就会触发then
方法绑定的回调函数
function timeout(ms) {return new Promise((resolve, reject) => {setTimeout(resolve, ms, 'done');});
}timeout(100).then((value) => {console.log(value);
});