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