Reflect对象经常和Proxy代理一起使用,原因有三点:
- Reflect提供的所有静态方法和Proxy第2个handle参数方法是一模一样的。
- Proxy get/set()方法需要的返回值正是Reflect的get/set方法的返回值,可以天然配合使用,比直接对象赋值/获取值要更方便和准确。
- receiver参数具有不可替代性。
Reflect方法 类似于 Reflect.apply(target, thisArgument, argumentsList) Function.prototype.apply() Reflect.construct(target, argumentsList[, newTarget]) new target(…args) Reflect.defineProperty(target, prop, attributes) Object.defineProperty() Reflect.deleteProperty(target, prop) delete target[name] Reflect.get(target, prop[, receiver]) target[name] Reflect.getOwnPropertyDescriptor(target, prop) Object.getOwnPropertyDescriptor() Reflect.getPrototypeOf(target) Object.getPrototypeOf() Reflect.has(target, prop) in 运算符 Reflect.isExtensible(target) Object.isExtensible() Reflect.ownKeys(target) Object.keys() Reflect.preventExtensions(target) Object.preventExtensions() Reflect.set(target, prop, value[, receiver]) target[prop] = value Reflect.setPrototypeOf(target, prototype) Object.setPrototypeOf()