ReflectES6 新引人的特性, 其目的是把一些 JavaScript 特有的属性 api 抽离出来。其有如下优点:

    • 返回值更加合理

      1. var obj = {}
      2. // 在 obj 中定义 a 属性
      3. Object.defineProperty(obj, 'a', {
      4. value: 2
      5. })
      6. // 使用 Object.defineProperty 在 obj 中重复定义 a 属性就会抛错
      7. try {
      8. Object.defineProperty(obj, 'a', { value: 3 })
      9. } catch(e) {
      10. console.log(e) // Uncaught TypeError: Cannot redefine property: a
      11. }
      12. // 使用 Reflect.defineProperty 在 obj 中重复定义 a 属性则是返回 false
      13. if (Reflect.defineProperty(obj, 'a', { value: 3 })) {
      14. console.log('属性添加成功')
      15. }
    • 将一些对象属性的操作判断统一为函数操作。
      比如 props in Obj 现在可写成 Reflect.has(Obj, props), 又比如 delete Obj[props] 现在可写成 Reflect.deleteProperty(Obj, props)

    • Proxy Handler 方法参数同步