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.set的receiver一样的原理。
Reflect.construct(target, arg)