Javascript 简明教程

JavaScript - The Reflect Object

JavaScript Reflect

在 JavaScript 中, Reflect 是一个全局对象,并且在 ECMAScript 6 (ES6) 引入。它包含静态方法,提供了在运行时与对象进行交互的更好方法。

与大多数全局对象不同,Reflect 不是一个构造函数。不能将它与 new 运算符一起使用或将 Reflect 对象调用为一个函数。Reflect 的所有方法都是静态的,就像 Math 对象一样。

它包含各种方法,供在运行时访问、更新、删除等对象属性。

Key Features of the Reflect Object

  1. Object construction − Reflect API 允许使用 Reflect.construct() 方法在运行时创建对象。

  2. Function invocation − Reflect API 的 apply() 方法用于通过传递上下文和参数来调用函数或对象方法。

  3. Object property manipulation − Reflect API 具有不同的方法来设置、更新或删除对象属性。而且,它可以通过防止它发生来处理对象的扩展。

Syntax

以下是使用 Reflect API 方法的语法 −

Reflect.method();

在上述语法中,“方法”是概括。“方法”可以是 Reflect API 的任何方法,如 get、set、apply、construct、has 等。

Reflect Methods

在下面的表格中,我们列出了 Reflect 的所有方法 −

Sr.No.

Name & Description

1

apply() To invoke a function.

2

construct() 允许指定不同的原型。

3

defineProperty() 允许插入或编辑对象属性。

4

deleteProperty() 允许删除对象属性。

5

get() 获取属性值。

6

getOwnPropertyDescriptor() 允许获取对象的描述符。

7

getPrototypeOf() 获取对象的原型。

8

has() 检查属性是否存在于对象中。

9

isExtensible() 允许检查对象是否可扩展。

10

ownKeys() 返回目标对象的自身键,忽略继承的键。

11

preventExtensions() 防止对象的扩展。

12

set() 将值设置为对象属性。

13

setPrototypeOf() 允许将对象的原型设置为 null 或另一个对象。

Examples

Example 1

在以下示例中,我们定义了一个汽车对象。'prop' 变量以字符串格式包含属性名称。

我们使用 Reflect 对象的 get() 方法从汽车对象中访问 'model' 属性。我们传入对象名称作为 get() 方法的第一个参数,属性名称作为第二个参数。

在输出中,您可以看到 'model' 属性的值。

<html>
   <body>
      <div id="output">The model of the car is: </div>
      <script>
         const car = {
            name: "Audi",
            model: "Q6",
            price: 7000000,
         }
         let prop = "model";
         let model = Reflect.get(car, prop);
         document.getElementById("output").innerHTML += model;
      </script>
   </body>
</html>
The model of the car is: Q6

Example 2

在以下示例中,我们使用 set() 方法将属性设置到对象中。set() 方法将对象、属性名称和值作为参数。

输出显示了 'doors' 属性值。通过这种方式,您可以使用 Reflect API 的 set() 方法在运行时将属性设置到对象中。

<html>
   <body>
      <div id="output">The total doors in the Audi Q6 is: </div>
      <script>
         const car = {
            name: "Audi",
            model: "Q6",
            price: 7000000,
         }
         const model = Reflect.set(car, "doors", 4);
         document.getElementById("output").innerHTML += car.doors;
      </script>
   </body>
</html>
The total doors in the Audi Q6 is: 4

在执行上面脚本后,输出窗口将弹出,显示网页上的文本。

Example 3

在以下示例中,我们使用 has() 方法动态检查特定属性是否存在于对象中。

这两个符号看起来很相似,但是是不同的,你可以从输出中看到。

<html>
   <body>
      <p id="output"></p>
      <script>
         const car = {
            name: "Audi",
            model: "Q6",
            price: 7000000,
         }
         const isName = Reflect.has(car, "name");
         if (isName) {
            document.getElementById("output").innerHTML = "The Car object contains the name.";
         }
      </script>
   </body>
</html>
The Car object contains the name.