# Reflect 对象

# 概述

  • Reflect对象和Proxy对象一样,是ES6为了操作对象而提供的新的API。
  • 现阶段Reflect对象和Object对象一样可以拿到语言内部的方法,比如Object.defineProperty,未来内部新方法只部署在Reflect对象上。
  • 修改某些方法的返回结果,会变得更合理。原先的会抛错,而Reflect会返回false。比如:Object.defineProperty(obj, name, desc)没法定义属性会抛错。
  • 让操作变得行为化,原先命令式的delete obj[prop],prop in obj, 现在是 Reflect.deleteProperty(Obj, prop), Reflect.has(obj, prop).
  • Reflect对象和Proxy对象之间的方法一一对应,使得能让Proxy对象完成默认的行为的同时额外处理其他的。

# Reflect 13种静态方法。

  • Reflect.get(target, propKey, receiver)
  • Reflect.set(target, propKey, value, receiver)
  • Reflect.has(target, propKey)
  • Reflect.deleteProperty(target, propKey)
  • Reflect.apply(target, ctx, args)
  • Reflect.ownkeys(target)
  • Reflect.getOwnPropertyDescriptor(target, propKey)
  • Reflect.defineProperty(target, propKey, propDesc)
  • Reflect.preventExtensions(target)
  • Reflect.getPrototypeOf(target)
  • Reflect.isExtensible(target)
  • Reflect.setPrototypeOf(target, proto)
  • Reflect.construct(target, args)

# 特殊说明

  • Reflect.get(target, propKey, receiver)
    • receiver 使得读取的this绑定到receiver上。
    • Reflect.setreceiver一样的原理。
  • Reflect.construct(target, arg)
    • 等价于 new target(arg)
最后一次修改时间: 9/28/2020, 11:37:23 AM