Reflect
2022年10月14日大约 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 异常