ES6-Reflect

概述

Reflect对象与Proxy对象一样,是ES6为了操作对象而提供的新API.Reflect的设计目的有以下几个

将Object对象的一些明显属于语言内部的方法放到Reflect对象上

也就是说,从Reflect对象可以获取到语言内部的方法

修改某些Object方法的结果

比如Object.defineProperty()方法,在无法定义的时候会抛出错误,而Reflect.defienProperty()则会返回false

让Object操作变成函数行为

某些Object操作是命令行为,比如 name in obj 和delete obj[name],而且这些命令在出错的时候会抛出错误,而Reflect.has(obj,name)和Reflect.deleteProperty(obj,name)让它们变成了函数行为

1
2
3
4
// 旧写法
'name' in obj
// 新写法
Reflect.has(obj,'name')

Reflect对象和Proxy对象的方法一一对应

只要是Proxy对象的方法,就能在Reflect对象上找到对应的方法,就可以使Proxy对象可以方便地调用对应Reflect方法来完成默认行为

1
2
3
4
5
6
7
8
9
Proxy(target, {
set: (target, name, value, receiver) => {
var success = Reflect.set(target, name, value, receiver)
if (success) {
console.log('success')
}
return success
}
})