Reflect
Reflect
Reflect对象是 ES6 操作对象的新API。
将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。现阶段,某些方法同时在Object和Reflect对象上部署,未来的新方法将只部署在Reflect对象上。也就是说,从Reflect对象上可以拿到语言内部的方法。
Reflect让Object操作都变成函数行为。
Reflect对象的方法与Proxy对象的方法一一对应,只要是Proxy对象的方法,就能在Reflect对象上找到对应的方法。
每一个Proxy对象的拦截操作(get、delete、has),内部都调用对应的Reflect方法,保证原生行为能够正常执行。 只是添加了输出日志的功能。
静态方法
Reflect对象一共有13个静态方法。大部分与Object对象的同名方法的作用都是相同的,而且它与Proxy对象的方法是一一对应的。
Reflect.get(target,name,receiver)
receiver可以绑定读取函数的this。
Reflect.set(target,name,value,receiver)
如果name属性设置了赋值函数,则赋值函数的this绑定receiver。
Reflect.has(target,name)
Reflect.has方法对应name in obj里面的in运算符。
Reflect.apply(target,thisArg,args)
Reflect.construct(target,args)
Reflect.defineProperty(target,name,desc)
Reflect.deleteProperty(target,name)
Reflect.deleteProperty方法等同于delete obj[name],用于删除对象的属性。
Reflect.ownKeys(target)
Reflect.ownKeys方法用于返回对象的所有属性,基本等同于Object.getOwnPropertyNames与Object.getOwnPropertySymbols之和。
Reflect.isExtensible(target)
Reflect.preventExtensions(target)
Reflect.getOwnPropertyDescriptor(target, name)
Reflect.getPrototypeOf(target)
Reflect.getPrototypeOf方法用于读取对象的__proto__属性,对应Object.getPrototypeOf(obj)。
Reflect.setPrototypeOf(target, prototype)
Reflect.setPrototypeOf方法用于设置对象的__proto__属性,返回第一个参数对象,对应Object.setPrototypeOf(obj, newProto)。
详情请看:http://es6.ruanyifeng.com/?search=import&x=15&y=8#docs/reflect#静态方法
Last updated
Was this helpful?