Reflect

Reflect

Reflect对象是 ES6 操作对象的新API。

Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。现阶段,某些方法同时在ObjectReflect对象上部署,未来的新方法将只部署在Reflect对象上。也就是说,从Reflect对象上可以拿到语言内部的方法。

Reflect让Object操作都变成函数行为。

Reflect对象的方法与Proxy对象的方法一一对应,只要是Proxy对象的方法,就能在Reflect对象上找到对应的方法。

每一个Proxy对象的拦截操作(getdeletehas),内部都调用对应的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.getOwnPropertyNamesObject.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?