Reflect
2025年1月10日大约 3 分钟
概述
Reflect不是一个函数对象,因此它是不可构造的所有属性和方法都是静态的,就像
Math对象作用
- 将 Object 属于语言内部的方法放到 Reflect 上
 - 修改某些 Object 方法的返回结果,让其变得更合理
 - 让 Object 操作变成函数行为
 - Reflect 对象的方法与 Proxy 对象的方法一一对应
 
Reflect.get()
- 描述:与从 对象 (
target[propertyKey]) 中读取属性类似,但它是通过一个函数执行来操作的 - 语法:
Reflect.get(target, propertyKey[, receiver]) - 参数 
- target:需要取值的目标对象
 - propertyKey:需要获取的值的键值
 - receiver:如果 target 对象中指定了 getter,receiver 则为 getter 调用时的this值
 
 - 返回值:属性的值
 - 注意:如果目标类型不是 Object,则抛出一个 TypeError
 
Reflect.set()
- 描述:在一个对象上设置一个属性
 - 语法:
Reflect.set(target, propertyKey, value[, receiver]) - 参数 
- target:设置属性的目标对象
 - propertyKey:设置的属性的名称
 - value:设置的值
 - receiver:如果遇到 setter,receiver 则为 setter 调用时的 this 值
 
 - 返回值:一个 Boolean 值表明是否成功设置属性
 - 注意:如果目标类型不是 Object,则抛出一个 TypeError
 
Reflect.has()
- 描述:与 
in操作符 相同 - 语法:
Reflect.has(target, propertyKey) - 参数 
- target:目标对象
 - propertyKey:属性名,需要检查目标对象是否存在此属性
 
 - 返回值:一个 Boolean 类型的对象指示是否存在此属性
 - 注意:如果目标类型不是 Object,则抛出一个 TypeError
 
Reflect.ownKeys()
- 描述:返回一个由目标对象自身的属性键组成的数组
 - 语法:
Reflect.ownKeys(target) - 参数 
- target:目标对象
 
 - 返回值:由目标对象的自身属性键组成的 Array
 - 注意:如果目标类型不是 Object,则抛出一个 TypeError
 
Reflect.defineProperty()
- 描述:基本等同于 
Object.defineProperty()方法,唯一不同是返回Boolean值 - 语法:
Reflect.defineProperty(target, propertyKey, attributes) - 参数 
- target:目标对象
 - propertyKey:要定义或修改的属性的名称
 - attributes:要定义或修改的属性的描述
 
 - 返回值:Boolean 值指示了属性是否被成功定义
 - 注意:如果目标类型不是 Object,则抛出一个 TypeError
 
Reflect.deleteProperty()
- 描述:用于删除属性,很像 
delete操作符,但它是一个函数 - 语法:
Reflect.deleteProperty(target, propertyKey) - 参数 
- target:目标对象
 - propertyKey:需要删除的属性的名称
 
 - 返回值:Boolean 值表明该属性是否被成功删除
 - 注意:如果目标类型不是 Object,则抛出一个 TypeError
 
Reflect.apply()
- 描述:通过指定的参数列表发起对目标(target)函数的调用
 - 语法:
Reflect.apply(target, thisArgument, argumentsList) - 参数 
- target:目标对象
 - thisArgument:target 函数调用时绑定的this对象
 - argumentsList:target 函数调用时传入的实参列表,该参数应该是一个类数组的对象
 
 - 返回值:调用完带着指定参数和 this 值的给定的函数后返回的结果
 - 注意:如果 target 对象不可调用,抛出 TypeError
 
Reflect.construct()
- 描述:行为有点像 
new操作符 构造函数 , 相当于运行new target(...args) - 语法:
Reflect.construct(target, argumentsList[, newTarget]) - 参数 
- target:被运行的目标构造函数
 - argumentsList:target 函数调用时传入的实参列表,该参数应该是一个类数组的对象
 - newTarget:作为新创建对象的原型对象的 constructor 属性, 参考 -new.target 操作符,默认值为 target
 
 - 返回值:以 target(如果newTarget存在,则为newTarget)函数为构造函数,argumentList 为其初始化参数的对象实例
 - 注意:如果 target 或者 newTarget 不是构造函数,抛出 TypeError 异常