Reflect
是一个内置的对象,提供拦截 JavaScript 操作的方法。这些方法与处理器对象(handler)的方法相同。Reflect
不是一个函数对象,不可对其使用new
操作符
Reflect
的主要目的是,将一些明显属于语言范畴的方法,转移到Reflect
对象上,例如:Object.defineProperty
、Function.prototype.apply()
,未来类似的功能也将只在Reflect
对象上实现。其次,Reflect
的方法返回值是一个布尔值,对于对象的操作更加合理,不需要使用try...catch
进行捕获。此外,是某些命令式的操作,转为函数式的行为,比如:delete obj[prop]
使用Reflect.deleteProperty(obj, prop)
替代。Reflect
对象上找到Proxy
支持的拦截方法,Proxy
可以通过调用Reflect
对应的方法作为修改行为的基础,Proxy
和Reflect
的结合使得对对象的操作更加的便捷。newTarget 参考new.target
Object.defineProperty()
类似delete
操作符的函数级操作