Reflect 的一些个人理解

Vue 3.0出来后,各种源码剖解的文章多了起来,其中Proxy和Reflect两个API频繁出现。查询了一下阮一峰大佬的文档后,自己也有了一些些理解:

Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API。其中Reflect是让以前类似Object.defineProperty()等方式变成Reflect.defineProperty(),让他们更具函数行为的特征。

Reflect对象的静态方法

Reflect.apply(target, thisArg, args)
Reflect.construct(target, args)
Reflect.get(target, name, receiver)
Reflect.set(target, name, value, receiver)
Reflect.defineProperty(target, name, desc)
Reflect.deleteProperty(target, name)
Reflect.has(target, name)
Reflect.ownKeys(target)
Reflect.isExtensible(target)
Reflect.preventExtensions(target)
Reflect.getOwnPropertyDescriptor(target, name)
Reflect.getPrototypeOf(target)
Reflect.setPrototypeOf(target, prototype)

可以看到,大部分与Object对象的同名方法的作用都是相同的

如一个例子:

var loggedObj = new Proxy(obj, {
  get(target, name) {
    console.log('get', target, name);
    return Reflect.get(target, name);
  },
  deleteProperty(target, name) {
    console.log('delete' + name);
    return Reflect.deleteProperty(target, name);
  },
  has(target, name) {
    console.log('has' + name);
    return Reflect.has(target, name);
  }
});
// 老写法
Function.prototype.apply.call(Math.floor, undefined, [1.75]) // 1

// 新写法
Reflect.apply(Math.floor, undefined, [1.75]) // 1

Reflect写法可以让代码更易读且规范。

你可能感兴趣的:(基础内容)