Skip to content
本页目录

Reflect 反射

介绍

在我看来,Reflect 最大的作用是统一原有的 Object 上的一些方法,并在其基础上做了扩展与修正,与新的 Proxy 保持一致性。可以说是另起炉灶,抛开历史包袱,使对象的操作方法能够容易扩展,并修复一些对象的历史问题。

其内置操作方法与 Proxy 一致,不再赘述。

一些替换 Object 操作的例子

  1. Object 对象的一些明显属于语言内部的方法(比如 Object.defineProperty ),放到 Reflect 对象上。现阶段,某些方法同时在 ObjectReflect 对象上部署,未来的新方法将只部署在 Reflect 对象上。也就是说,从 Reflect 对象上可以拿到语言内部的方法。
  2. 修改某些 Object 方法的返回结果,让其变得更合理。比如,Object.defineProperty(obj, name, desc) 在无法定义属性时,会抛出一个错误,而 Reflect.defineProperty(obj, name, desc) 则会返回 false
  3. Object 操作都变成函数行为。某些 Object 操作是命令式,比如 name in objdelete obj[name],而Reflect.has(obj, name)Reflect.deleteProperty(obj, name) 让它们变成了函数行为。