Reflect学习

不论是在之前看es6的 Proxy 文档,还是我在项目中,都看到了 Reflect 的影子,之后我也尝试用 Reflect 来优化自己的代码,今天认真的学习一下。

为了使得代码更容易维护,提高代码的可阅读性,把一些对对象的操作、或是一些方法归到一个类,也可以说是一个对象中,而这个对象就是 ReflectReflect 中的很多方法在其他对象中可以找到,也许这些方法以后会从其他对象中剖离,这是一个渐进的过程。

静态方法

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
2
3
4
5
var obj = {
text: 'hello'
};
Reflect.get(obj, 'text'); // 'hello'
Reflect.get(obj, 'text2'); // undefined

我们可以发现,这就是我们平时获取对象属性的操作。

而且它的第三个参数还可以扩展。

Reflect.set 同理。

Reflect.has

1
2
3
4
5
var obj = {
text: 'hello'
};
Reflect.has(obj, 'text'); // true
Reflect.has(obj, 'text2'); // false

对应了对象中的in运算符

1
'text' in obj // true

Reflect.deleteProperty

1
2
3
4
5
6
var obj = {
text: 'hello',
text2: 'world'
}
Reflect.deleteProperty(obj, 'text2'); // true
console.log(obj); // {text: 'hello'}

对应了对象中删除属性的delete运算符。

1
delete obj.text2 // true

Reflect.defineProperty

基本等同于 Object.defineProperty 。接触过Vue2的,基本都知道大名鼎鼎的 Object.defineProperty 了。但其以后会被逐渐废除,尽量使用 Reflect.defineProperty

剩余的有时间再看了。