ES6 Reflect

2019-06-27  本文已影响0人  萘小蒽

Reflect对象与Proxy对象一样也是ES6为了操作对象而提供的心API。

Reflect对象设计目的:

1. 将Object对象的一些明显属于语言层面的方法放到Reflect对象上。

现阶段,一些方法在ObjectReflect对象上同时部署,未来的新方法将只部署在Reflect上。

2. 修改某些Object方法的返回结果,让其变得更合理。

比如Object.difineProperty(target,propertyKey,attr)在无法定义属性时会抛出一个错误,
Reflect.difineProperty(target,propertyKey,attr)返回false

3. 让Object的操作都变成函数行为。

某些Object操作是命令式,比如name in objdelete,而Reflect.has(obj,name)Reflect.deleteProperty(obj,name)让它们变成函数行为。

4. Reflect对象方法与Proxy对象方法一一对应,只是要是Proxy对象方法,就能在Reflect对象上找到对应的方法。让Proxy对象可以方便的调用对应的Reflect方法完成默认行为,作为修改行为的基础。

不管Proxy如何修改默认行为,总能在Reflect上获取默认行为。

Proxy(target,{
   set:function(target,name,value,receiver){
    var success = Reflect.set(target,name,value,receiver);
     if(success){
       log('property'+name+'on'+target+'set to ' + value)
     }
    return success;
   }
})

上面代码中,Proxy方法拦截了target对象的属性赋值行为。采用Reflect.set方法赋值给对象的属性,然后在部署额外的功能。

上一篇 下一篇

猜你喜欢

热点阅读