是什么

像Math对象一样,是一个全新的静态类,不能new,只包含13个操作对象的静态方法;
Reflect.apply(target, thisArgument, argumentsList)和 Function.prototype.apply() 功能类似。
Reflect.construct(target, argumentsList[, newTarget])相当于执行 new target(…args)。
Reflect.defineProperty(target, propertyKey, attributes)和 Object.defineProperty() 类似。如果设置成功就会返回 true
Reflect.deleteProperty(target, propertyKey)作为函数的delete操作符,相当于执行 delete target[name]。
Reflect.get(target, propertyKey[, receiver])获取对象身上某个属性的值,类似于 target[name]。
Reflect.getOwnPropertyDescriptor(target, propertyKey)类似于 Object.getOwnPropertyDescriptor()。
Reflect.getPrototypeOf(target)类似于 Object.getPrototypeOf()。
Reflect.has(target, propertyKey)判断一个对象是否存在某个属性,和 in 运算符 的功能完全相同。
Reflect.isExtensible(target)类似于 Object.isExtensible().
Reflect.ownKeys(target)返回一个包含所有自身属性(不包含继承属性)的数组。(类似于 Object.keys(), 但不会受enumerable影响).
Reflect.preventExtensions(target)类似于 Object.preventExtensions()。返回一个Boolean。
Reflect.set(target, propertyKey, value[, receiver])将值分配给属性的函数。返回一个Boolean,如果更新成功,则返回true。
Reflect.setPrototypeOf(target, prototype)设置对象原型的函数. 返回一个 Boolean, 如果更新成功,则返回true。

  1. // Reflect 对象
  2. // const obj = {
  3. // foo: '123',
  4. // bar: '456'
  5. // }
  6. // const proxy = new Proxy(obj, {
  7. // get (target, property) {
  8. // console.log('watch logic~')
  9. // return Reflect.get(target, property)
  10. // }
  11. // })
  12. // console.log(proxy.foo)
  13. const obj = {
  14. name: 'zce',
  15. age: 18
  16. }

意义

统一了对象的操作

  1. // console.log('name' in obj)
  2. // console.log(delete obj['age'])
  3. // console.log(Object.keys(obj))
  4. console.log(Reflect.has(obj, 'name'))
  5. console.log(Reflect.deleteProperty(obj, 'age'))
  6. console.log(Reflect.ownKeys(obj))