不论是在之前看es6的 Proxy
文档,还是我在项目中,都看到了 Reflect
的影子,之后我也尝试用 Reflect
来优化自己的代码,今天认真的学习一下。
为了使得代码更容易维护,提高代码的可阅读性,把一些对对象的操作、或是一些方法归到一个类,也可以说是一个对象中,而这个对象就是 Reflect
。 Reflect
中的很多方法在其他对象中可以找到,也许这些方法以后会从其他对象中剖离,这是一个渐进的过程。
静态方法
看ES6入门的文档里,Reflect的静态方法有13个。
- Reflect.apply(target, thisArg, args)
- Reflect.construct(target, args)
- Reflect.get(target, name, receiver)
- Reflect.set(target, name, value, receiver)
- Reflect.defineProperty(target, name)
- Reflect.deleteProperty(target, name)
- Reflect.has(target, name)
- Reflect.ownKeys(target)
- Reflect.isExtensible(target)
- REflect.preventExtensios(target)
- Reflect.getOwnPropertyDescriptor(target, name)
- Reflect.getPrototypeOf(target)
- Reflect.setPrototypeof(target, prototype)
说几个可能算比较常用的方法吧,剩下的再慢慢看
Reflect.get
1 | var obj = { |
我们可以发现,这就是我们平时获取对象属性的操作。
而且它的第三个参数还可以扩展。
Reflect.set
同理。
Reflect.has
1 | var obj = { |
对应了对象中的in运算符
1 | 'text' in obj // true |
Reflect.deleteProperty
1 | var obj = { |
对应了对象中删除属性的delete运算符。
1 | delete obj.text2 // true |
Reflect.defineProperty
基本等同于 Object.defineProperty
。接触过Vue2的,基本都知道大名鼎鼎的 Object.defineProperty
了。但其以后会被逐渐废除,尽量使用 Reflect.defineProperty
。
剩余的有时间再看了。