跳至主要內容

Reflect

Yang大约 3 分钟

Reflectopen in new window


概述

  • Reflect 不是一个函数对象,因此它是不可构造的

  • 所有属性和方法都是静态的,就像 Math 对象

  • 作用

    • 将 Object 属于语言内部的方法放到 Reflect 上
    • 修改某些 Object 方法的返回结果,让其变得更合理
    • 让 Object 操作变成函数行为
    • Reflect 对象的方法与 Proxy 对象的方法一一对应

Reflect.get()open in new window

  • 描述:与从 对象 (target[propertyKey]) 中读取属性类似,但它是通过一个函数执行来操作的
  • 语法:Reflect.get(target, propertyKey[, receiver])
  • 参数
    • target:需要取值的目标对象
    • propertyKey:需要获取的值的键值
    • receiver:如果 target 对象中指定了 getter,receiver 则为 getter 调用时的this值
  • 返回值:属性的值
  • 注意:如果目标类型不是 Object,则抛出一个 TypeError

Reflect.set()open in new window

  • 描述:在一个对象上设置一个属性
  • 语法:Reflect.set(target, propertyKey, value[, receiver])
  • 参数
    • target:设置属性的目标对象
    • propertyKey:设置的属性的名称
    • value:设置的值
    • receiver:如果遇到 setter,receiver 则为 setter 调用时的 this 值
  • 返回值:一个 Boolean 值表明是否成功设置属性
  • 注意:如果目标类型不是 Object,则抛出一个 TypeError

Reflect.has()open in new window

  • 描述:与 in 操作符 相同
  • 语法:Reflect.has(target, propertyKey)
  • 参数
    • target:目标对象
    • propertyKey:属性名,需要检查目标对象是否存在此属性
  • 返回值:一个 Boolean 类型的对象指示是否存在此属性
  • 注意:如果目标类型不是 Object,则抛出一个 TypeError

Reflect.ownKeys()open in new window

  • 描述:返回一个由目标对象自身的属性键组成的数组
  • 语法:Reflect.ownKeys(target)
  • 参数
    • target:目标对象
  • 返回值:由目标对象的自身属性键组成的 Array
  • 注意:如果目标类型不是 Object,则抛出一个 TypeError

Reflect.defineProperty()open in new window

  • 描述:基本等同于 Object.defineProperty() 方法,唯一不同是返回 Boolean
  • 语法:Reflect.defineProperty(target, propertyKey, attributes)
  • 参数
    • target:目标对象
    • propertyKey:要定义或修改的属性的名称
    • attributes:要定义或修改的属性的描述
  • 返回值:Boolean 值指示了属性是否被成功定义
  • 注意:如果目标类型不是 Object,则抛出一个 TypeError

Reflect.deleteProperty()open in new window

  • 描述:用于删除属性,很像 delete 操作符,但它是一个函数
  • 语法:Reflect.deleteProperty(target, propertyKey)
  • 参数
    • target:目标对象
    • propertyKey:需要删除的属性的名称
  • 返回值:Boolean 值表明该属性是否被成功删除
  • 注意:如果目标类型不是 Object,则抛出一个 TypeError

Reflect.apply()open in new window

  • 描述:通过指定的参数列表发起对目标(target)函数的调用
  • 语法:Reflect.apply(target, thisArgument, argumentsList)
  • 参数
    • target:目标对象
    • thisArgument:target 函数调用时绑定的this对象
    • argumentsList:target 函数调用时传入的实参列表,该参数应该是一个类数组的对象
  • 返回值:调用完带着指定参数和 this 值的给定的函数后返回的结果
  • 注意:如果 target 对象不可调用,抛出 TypeError

Reflect.construct()open in new window

  • 描述:行为有点像 new 操作符 构造函数 , 相当于运行 new target(...args)
  • 语法:Reflect.construct(target, argumentsList[, newTarget])
  • 参数
    • target:被运行的目标构造函数
    • argumentsList:target 函数调用时传入的实参列表,该参数应该是一个类数组的对象
    • newTarget:作为新创建对象的原型对象的 constructor 属性, 参考 -new.targetopen in new window 操作符,默认值为 target
  • 返回值:以 target(如果newTarget存在,则为newTarget)函数为构造函数,argumentList 为其初始化参数的对象实例
  • 注意:如果 target 或者 newTarget 不是构造函数,抛出 TypeError 异常
上次编辑于:
贡献者: sunzhenyang