概念
你还记不记得,再es5里面有好多类似object.defineproperty或者object.keys这样的操作对象的方法。
这几个方法,如果没获取到值,就会直接报错。
你说对了,这个Reflect对象就是用来替代Object的,如果没有获取到值就会返回false。
Reflect中的方法跟Proxy中的是一样的。因为他本身就是对象。。
用法:
理论上来说,任何操作对象的方式,例如说,读取值,设置key等等等,在Reflect对象上都存在,这个东西就是es6设置出来
把以前那些混乱的操作方法都统一。
let obj = {
name:"objname",
arr:[1,2,3,4],
fun:()=>{
console.log(123);
}
}
console.log(Reflect.get(obj,"name"));
设置也是一样的
let obj = {
name:"objname",
arr:[1,2,3,4],
fun:()=>{
console.log(123);
}
}
Reflect.set(obj, "name", "333");
console.log(Reflect.get(obj,"name"));
再来一个官方的稍微复杂一点的例子
var myObject = {
foo: 4,
set bar(value) {
return this.foo = value;
},
};
var myReceiverObject = {
foo: 0,
};
Reflect.set(myObject, 'bar', 1, myReceiverObject);
myObject.foo // 4
myReceiverObject.foo // 1
如果你set赋值的时候,在那个对象种,正好监听的这个赋值,那就会触发这个行为。