编程中的反思是什么?
反射是程序检查,内省和修改其在运行时的结构和行为的能力。换句话说,它是能够查看程序的结构并确定在运行时制成的结构。
简而言之,反射是在运行时检查和操纵类,方法,属性和其他元数据的能力。
为什么要反思?
当您想在运行时做一些您不知道的事情时,反射很有用。例如,您可能需要创建类的新实例,或在对象上调用方法,或在运行时获得属性的值,甚至设置属性的值。
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频道)。
ð奖励内容ð
您可能会看这些文章,这肯定会提高您的知识和生产力。
一般主题
- Event Driven Architecture: A Practical Guide in Javascript
- Best Practices For Case Styles: Camel, Pascal, Snake, and Kebab Case In Node And Javascript
- After 6 years of practicing MongoDB, Here are my thoughts on MongoDB vs MySQL
软件包和库
- Collections: Your ultimate Javascript Arrays Manager
- Supportive Is: an elegant utility to check types of values in JavaScript
- Localization: An agnostic i18n package to manage localization in your project
React JS软件包
课程(文章)