Appearance
Reflect
统一命名空间
在 Reflect
出现之前,JavaScript
已经存在对象反射机制相关的 API
,但是这些 API
没有组织在一个命名空间下。 从 ES6
开始,这些 API
都存在于 Reflect
命名空间下。
使用更加简单
Object
内置的方法失败时会抛出一个异常交由开发者处理,而 Reflect
提供的方法返回的是一个 boolean
类型的值。
Example1: Object.defineProperty()
方法
javascript
try {
Object.defineProperty(obj, name, desc);
// 属性定义成功
} catch (e) {
// 属性定义失败,需要在这里进行异常处理
}
Example2: Reflect.defineProperty()
方法
javascript
if (Reflect.defineProperty(obj, name, desc)) {
// 属性定义成功
} else {
// 属性定义失败
}
函数化风格
- 使用 new 调用构造函数,
new Function(...args) -> Reflect.constructor(Function, args, Function)
- 检查属性是否存在于对象,
property in object -> Reflect.has(object, property)
- 属性访问符,
object[key] -> Reflect.get(object, key)