是什么
像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。
// Reflect 对象// const obj = {// foo: '123',// bar: '456'// }// const proxy = new Proxy(obj, {// get (target, property) {// console.log('watch logic~')// return Reflect.get(target, property)// }// })// console.log(proxy.foo)const obj = {name: 'zce',age: 18}
意义
统一了对象的操作
// console.log('name' in obj)// console.log(delete obj['age'])// console.log(Object.keys(obj))console.log(Reflect.has(obj, 'name'))console.log(Reflect.deleteProperty(obj, 'age'))console.log(Reflect.ownKeys(obj))
