Reflect对象的主要功能:
1、作为Object对象的优化:
1) 将Object对象上的一些明显属于语言内部的方法放到Reflect上。例如:Object.defineProperty等。
2) 修改那些不合理的Object方法的返回结果。
例如,Object.defineProperty(obj, name, desc)
在无法定义属性时,会抛出一个错误,而Reflect.defineProperty(obj, name, desc)
则会返回false。
这样,我们使用Reflect.defineProperty(obj, name, desc)
就不用再使用try…catch代码块包裹了。
3) 修改命令式操作为函数行为:例如 prop in obj 改为 Reflect.has(obj, prop),delete obj[prop]改为Reflect.deleteProperty(obj, name)。
**2、作为Proxy的搭档:**Reflect对象的方法与Proxy对象的方法一一对应,只要是Proxy对象可以代理的方法,就能在Reflect对象上找到与之对应的方法。这是为了,让Proxy对象可以方便地调用对应的Reflect方法,完成默认行为,作为修改行为的基础。
与Proxy的方法一一对应,Reflect对象拥有13个静态方法:
Reflect.apply(target,thisArg,args)
Reflect.construct(target,args)
Reflect.get(target,name,receiver)
Reflect.set(target,name,value,receiver)
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)