Reflect

Reflect

Reflect 是一个内置的对象,它提供拦截 JS 操作的方法。这些方法与 proxy 中的 handlers 对象 的方法相同。且 Reflect 不是一个函数对象,因此它不可构造,不能通过 new 运算符实现调用。

静态方法

  • Reflect.apply():该方法通过指定的参数列表发起对目标(target)函数的调用。

    • 语法

        Reflect.apply(target, thisArgument, argumentsList)
      
    • 参数
      target:目标函数。
      ​thisArgument:target 函数调用时绑定的this对象。
      ​argumentsList:target 函数调用时传入的实参列表,该参数应该是一个类数组的对象。

    • 返回值
      ​ 返回值是调用完带着指定参数和 this 值的给定的函数后返回的结果。

  • Reflect.construct():该方法用于 new 操作符构造函数。

    • 语法

        Reflect.construct(target, argumentsList[, newTarget])
      
    • 参数
      target:被运行的目标构造函数
      argumentsList:类数组,目标构造函数调用时的参数。
      newTarget:作为新创建对象的原型对象的 constructor 属性, 参考 new.target 操作符,默认值为 target,可选参数

    • 返回值
      ​ 以 target(如果 newTarget 存在,则为newTarget)函数为构造函数,argumentList为其初始化参数的对象实例。

  • Reflect.defineProperty():该方法基本等同于Object.defineProperty() 方法,唯一不同是返回 Boolean 值。

    • 语法

        Reflect.defineProperty(target, propertyKey, attributes)
      
    • 参数
      target:目标函数。
      propertyKey:要定义或修改的属性的名称。
      attributes:要定义或修改的属性的描述。

    • 返回值
      ​ Boolean 值指示了属性是否被成功定义。

  • Reflect.deleteProperty():该方法允许用于删除属性。

    • 语法

        Reflect.deleteProperty(target, propertyKey)
      
    • 参数
      target:删除属性的目标对象。
      propertyKey:需要删除的属性的名称。

    • 返回值
      ​ Boolean 值表明该属性是否被成功删除。

  • Reflect.get():该方法从对象 ( target[propertyKey] ) 中读取属性类似,但它是通过一个函数执行来操作的。

    • 语法

        Reflect.get(target, propertyKey[, receiver])
      
    • 参数
      target:需要取值的目标对象。
      propertyKey:需要获取的值的键值。
      receiver:如果 target 对象中指定了 getter,receiver 则为 getter 调用时的 this 值。

    • 返回值
      ​ 返回属性的值。

  • Reflect.getOwnPropertyDescriptor():该方法与 Object.getOwnPropertyDescriptor() 方法相似。如果在对象中存在,则返回给定的属性的属性描述符。否则返回 undefined 。

    • 语法

        Reflect.getOwnPropertyDescriptor(target, propertyKey)
      
    • 参数
      target:需要寻找属性的目标对象。
      propertyKey:获取自己的属性描述符的属性的名称。

    • 返回值
      ​ 如果属性存在于给定的目标对象中,则返回属性描述符;否则,返回 undefined 。

  • Reflect.getPrototypeOf():该方法与 Object.getPrototypeOf() 方法几乎是一样的。都是返回指定对象的原型(即内部的 [[Prototype]] 属性的值)。

    • 语法

        Reflect.getPrototypeOf(target)
      
    • 参数
      target:获取原型的目标对象。

    • 返回值
      ​ 给定对象的原型。如果给定对象没有继承的属性,则返回 null 。

  • Reflect.has():该方法作用与 in 操作符 相同。

    • 语法

        Reflect.has(target, propertyKey)
      
    • 参数
      target:目标对象。
      propertyKey:属性名,需要检查目标对象是否存在此属性。

    • 返回值
      ​ 一个 Boolean 类型的对象指示是否存在此属性。

  • Reflect.isExtensible():该方法判断一个对象是否可扩展 (即是否能够添加新的属性)。与它 Object.isExtensible() 方法相似。

    • 语法

        Reflect.isExtensible(target)
      
    • 参数
      target:检查是否可扩展的目标对象。

    • 返回值
      ​ 返回一个 Boolean 值表明该对象是否可扩展。

  • Reflect.ownKeys():该方法返回一个由目标对象自身的属性键组成的数组。

    • 语法

        Reflect.ownKeys(target)
      
    • 参数
      target:获取自身属性键的目标对象。

    • 返回值
      ​ 由目标对象的自身属性键组成的 Array 。

  • Reflect.preventExtensions():该方法阻止新属性添加到对象 (例如:防止将来对对象的扩展被添加到对象中)。该方法与 Object.preventExtensions() 相似。

    • 语法

        Reflect.preventExtensions(target)
      
    • 参数
      target:阻止扩展的目标对象。

    • 返回值
      ​ 返回一个 Boolean 值表明目标对象是否成功被设置为不可扩展。

  • Reflect.set():该方法允许你在对象上设置属性/属性值。

    • 语法

        Reflect.set(target, propertyKey, value[, receiver])
      
    • 参数
      target:设置属性的目标对象。
      propertyKey:设置的属性的名称。
      value:设置的值。
      receiver:如果遇到 setter,receiver 则为 setter 调用时的t his 值。

    • 返回值
      ​ 返回一个 Boolean 值表明是否成功设置属性。

  • Reflect.setPrototypeOf():该方法除了返回类型以外,以及和 Object.setPrototypeOf() 方法是一样的。它可设置对象的原型(即内部的 [[Prototype]] 属性)为另一个对象或 null,如果操作成功返回 true,否则返回 false 。

    • 语法

        Reflect.setPrototypeOf(target, prototype)
      
    • 参数
      target:设置原型的目标对象。
      prototype:对象的新原型(一个对象或 null ) 。

    • 返回值
      ​ 返回一个 Boolean 值表明是否原型已经成功设置。

参考文献

上一篇:Golang_反射


下一篇:js reflect