let person = {
name:“jonas”,
get age(){
return this.age
},
set age(value){
return this.age = value
}
}
let jonas = {age:18}
Reflect.set(person,“age”,20,jonas)
console.log(jonas.age) //20
同样的,如果第一个参数不是对象,则会报错。
Reflect.has(obj,name)
判断 name
是否为 obj
对象中的属性,相当于 name in obj
。方法返回布尔值。
let person = {name:“jonas”}
let result = Reflect.has(person,“name”)
console.log(result) //true
Reflect.deleteProperty(obj,name)
删除对象中的属性,相当于 delete obj[name]
,该方法返回布尔值,如果属性不存在或删除成功,则返回 true
let person = {name:“jonas”}
let result = Reflect.deleteProperty(person,“name”)
console.log(result) //true
console.log(person) ///{}
Reflect.construct(target,args)
该方法等同于 new
运算符,提供了一种不使用 new
关键字实例化的方式。其中 target
是构造函数,args
则是函数的参数列表。
function Person(name,age){
this.name = name
this.age = age
}
let person = Reflect.construct(Person,[“jonas”,18])
console.log(person) //Person { name: ‘jonas’, age: 18 }
Reflect.getPrototypeOf(obj)
用于读取对象的 __proto__
属性,对应 Object.getPrototypeOf(obj)
Reflect.getPrototypeOf()
与 Object.getPrototypeOf()
的区别是后者如果第一个参数不是对象,则会转换为对象,而前者会报错。
Reflect.setPrototypeOf(obj,proto)
该方法用于设置目标对象的原型,与 Object.setPrototypeOf()
对应,返回值是一个布尔值,表示是否设置成功。
提点:封闭对象,无法扩展对象,冻结对象不能设置原型。
如果第一个参数不是,这两个方法都会报错。
Reflect.apply(func,thisArg,args)
该方法等同于 Function.prototype.apply.call()
用于绑定 this
对象后执行函数。
一般情况下,如果需要绑定函数 this
,可以直接 fn.call()
,但是如果函数重写了 apply()
方法,就只能通过 Function
的原型来实现了。然而,Reflect
就是简化了这个操作。
Reflect.defineProperty(target,key,desc)
该方法等同于 Object.defineProperty
,用来为对象定义属性。注意:Object.defineProperty
将逐渐被淘汰,取而代之的是 Reflect.defineProperty
.
Reflect.getOwnPropertyDescriptor(target,prop)
最后
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容
PropertyDescriptor(target,prop)`
最后
[外链图片转存中…(img-YUPdlx8w-1720111597230)]
[外链图片转存中…(img-nJ8xreKH-1720111597232)]
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容