Appearance
Reflect
统一命名空间
在 Reflect 出现之前,JavaScript 已经存在对象反射机制相关的 API,但是这些 API 没有组织在一个命名空间下。 从 ES6 开始,这些 API 都存在于 Reflect 命名空间下。
使用更加简单
Object 内置的方法失败时会抛出一个异常交由开发者处理,而 Reflect 提供的方法返回的是一个 boolean 类型的值。
Example1: Object.defineProperty() 方法
try {
Object.defineProperty(obj, name, desc);
// 属性定义成功
} catch (e) {
// 属性定义失败,需要在这里进行异常处理
}
Example2: Reflect.defineProperty() 方法
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)