Reflect

Reflect 是一个内置的对象,它提供拦截 JavaScript 操作的方法。这些方法与proxy handlers的方法相同。Reflect不是一个函数对象,因此它是不可构造的

与大多数全局对象不同,Reflect不是一个构造函数。
你不能将其与一个new运算符一起使用,或者将Reflect对象作为一个函数来调用。
Reflect的所有属性和方法都是静态的(就像Math对象)。

 

(1) 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。
现阶段,某些方法同时在Object和Reflect对象上部署,
未来的新方法将只部署在Reflect对象上。
也就是说,从Reflect对象上可以拿到语言内部的方法。 (2) 修改某些Object方法的返回结果,让其变得更合理。
比如,Object.defineProperty(obj, name, desc)在无法定义属性时,会抛出一个错误,
而Reflect.defineProperty(obj, name, desc)则会返回false。 
// 老写法
try {
  Object.defineProperty(target, property, attributes);
  // success
} catch (e) {
  // failure
}

// 新写法
if (Reflect.defineProperty(target, property, attributes)) {
  // success
} else {
  // failure
}

 让Object操作都变成函数行为 

// 老写法
'assign' in Object // true

// 新写法
Reflect.has(Object, 'assign') // true

  

 

posted @ 2020-03-25 13:17  banzhuxiang  阅读(264)  评论(0)    收藏  举报