23. Reflect
大约 1 分钟
Reflect
Reflect不是一个构造函数,而是一个直接调用的对象,内部装有一些ES6中操作对象的API,里面的方法与Proxy一一对应
Reflect的用处
将Object对象的一些明显语言内部的方法,如
Object.defineProperty
等放在Reflect对象上,现在虽然在Object对象与Reflect对象中调用这些方法都可以实现,但是在以后会慢慢全部转移到Reflect对象上修改某些Object对象中的方法的返回结果,让其变得更加合理,如:
/* 比如同时定义属性的方法,在无法定义属性时,两者的表现结果完全不同 */ Object.defineProperty(obj,name,value);//报错 Reflect.defineProperty(obj,name,value);//
使得对象的操作都变成函数的形式,一些对对象的操作都是命令式的,比如in与delete操作符来对对象操作
var obj={a:1,b:2,c:3}; console.log("a" in obj); console.log(Reflect.has(obj,"a"));//代替上式 delete obj.a; Reflect.deleteProperty(obj,"a");//代替上式
Reflect对象的方法与Proxy一一对应,只要是Proxy对象的方法,就能在Reflect对象中找到对应的方法这就让Proxy对象可以方便的调用Reflect方法,完成默认行为,作为修改行为的基础