16-ES6 ++:JavaScript中的反射
#javascript #es6 #esnext

编程中的反思是什么?

反射是程序检查,内省和修改其在运行时的结构和行为的能力。换句话说,它是能够查看程序的结构并确定在运行时制成的结构。

简而言之,反射是在运行时检查和操纵类,方法,属性和其他元数据的能力。

为什么要反思?

当您想在运行时做一些您不知道的事情时,反射很有用。例如,您可能需要创建类的新实例,或在对象上调用方法,或在运行时获得属性的值,甚至设置属性的值。

ES6中的反射

在ES6中,我们可以使用Reflect对象在JavaScript中进行反射。

Reflect对象是一个内置对象,可为截然的JavaScript操作提供方法。这些方法与代理处理程序的方法相同。 Reflect对象不是函数对象。您不能将其与new运算符一起使用,也不能将Reflect对象调用为函数。

Reflect对象用于调用对象上的方法。它类似于Function.prototype.apply()方法。

用法的示例

JavaScript是一种动态语言。这意味着您可以在运行时添加属性和方法。您还可以在运行时从对象中删除属性和方法。您也可以在运行时更改属性的价值。

const person = {
  name: "Hasan",
  age: 30,
};

person.name = "Hasan Zohdy";

delete person.age;

在上面的示例中,我们可以在运行时添加,删除和更改属性的值。

让我们看一个使用Reflect对象添加,删除和更改属性值的示例。

const person = {
  name: "Hasan",
  age: 30,
};

Reflect.set(person, "name", "Hasan Zohdy");

Reflect.deleteProperty(person, "age");

在上面的示例中,我们使用Reflect.set()方法来更改name属性的值。我们使用Reflect.deleteProperty()方法删除age属性。

反射方法

以下列表显示了Reflect对象的方法。

  • Reflect.apply():调用目标函数,该函数用作为数组(或类似数组的对象)提供的参数。
  • Reflect.construct():以作为数组(或类似数组的对象)提供的参数调用目标构造函数。
  • Reflect.defineProperty():定义目标对象上的新属性。
  • Reflect.deleteProperty():从目标对象删除属性。
  • Reflect.get():从目标对象获取属性的值。
  • Reflect.getOwnPropertyDescriptor():从目标对象获取属性的属性描述。
  • Reflect.getPrototypeOf():获取目标对象的原型。
  • Reflect.has():检查目标对象是否具有指定名称的属性。
  • Reflect.isExtensible():检查目标对象是否可扩展。
  • Reflect.ownKeys():返回目标对象的所有属性键的数组。
  • Reflect.preventExtensions():防止目标对象的任何扩展。
  • Reflect.set():设置目标对象上属性的值。
  • Reflect.setPrototypeOf():设置目标对象的原型。

反映与代理

您可能会想知道Reflect对象和Proxy对象之间的相似之处。 Proxy对象用于定义基本操作的自定义行为(例如属性查找,分配,枚举,功能调用等)。 Reflect对象用于调用对象上的方法。它类似于Function.prototype.apply()方法。

您是否需要在现实世界项目中使用反思?

老实说,大多数时候答案是否定的。但是,如果您正在从事一个项目,该项目需要您在运行时不知道的运行时做某事,那么您可能需要使用Reflect对象。

- 结论

在本文中,我们了解了JavaScript中的反思。我们了解了Reflect对象及其方法。我们还了解了Reflect对象和Proxy对象之间的相似性。

â•给我买一杯咖啡。

如果您喜欢我的文章并看到对您有用,您可能会buy me a coffee,它将帮助我继续前进并继续创建更多内容。

ð加入我们的社区

Discord上加入我们的社区以获得帮助和支持(节点JS 2023频道)。

ð奖励内容ð

您可能会看这些文章,这肯定会提高您的知识和生产力。

一般主题

软件包和库

React JS软件包

课程(文章)