前言
小伙伴们大家好。前一篇文章中我们学习了ES6中新增的Reflect对象,了解了该对象的一些特点以及设计目的,最后还对该对象上的一些静态方法做了一个简单介绍。接下来将对这些方法进行一个展开分享。
Reflect.get(target, key, receiver)
- Reflect.get()方法查找并返回target对象中的key属性,如果没有该属性则返回undefined,该与target[key]读取属性类似,但它是通过一个函数执行来操作的。
- Reflect.get方法接收3个参数:
- target:需要取值的目标对象
- key:需要取值的目标对象的属性(键名)
- receiver:如果目标对象target中指定了getter,则getters在调用时其内部的this将会指向receiver
- 方法返回值为目标对象中属性对应的值
- 如果target不是一个Object类型,则会报错
let obj = {
x: 1,
y: 2,
get z(){
return this.x + this.y
}
}
Reflect.get(obj, 'x');// 1
Reflect.get(obj, 'y');// 2
Reflect.get(obj, 'z');// 3
Reflect.get(['one','two'],1);// two
Reflect.get(1, 'name');//报错
let newObj = {
x: 5,
y: 10
}
Reflect.get(obj, 'z', newObj);//15 obj中指定了getter,则getter中的this指向了第三个参数newObj
Reflect.set(target, key, value, receiver)
- Reflect.set方法用于给目标对象的属性设置值,类似于target[key] = value。
- Reflect.set方法接收4个参数:
- target:要设置值的目标对象
- key:目标对象中的属性名
- value:要给属性设置的新值
- receiver:如果目标对象的属性设置了setter,则setter中的this指向receiver
- 如果第一个target不是一个Object类型,则会报错
let obj = {
x: 1,
set y(value){
return this.x = value
}
}
console.log(obj.x);// 1
Reflect.set(obj, 'x', 10)
console.log(obj