这是该系列中的第26页,致力于探索JavaScript及其构建组件。在识别和描述核心元素的过程中,我们还分享了在构建会话中使用的拇指规则,需要坚固且高性能的JavaScript应用程序来帮助公司优化用户的数字体验。
在现实生活中,一个女人可以有不同的角色。她可以同时成为一名母亲,员工和妻子。同一女性将根据她目前的特定角色进行不同的功能。这是多态性的概念,能够采用不同的形式。
虽然众多人不知道多态是什么,它如何在JavaScript中工作以及为什么需要它,多态性在编程中很重要;它是面向对象编程的核心功能。例如,虽然这个女人在作为雇员的工作中,但她很不可能承担母亲的特征,而她作为母亲家里的反之亦然。
对于数据导向的编程语言,如锈,多态性也是用实体组件系统(ECS)实现的重要特征。编程语言可以为几种不同的底层数据类型呈现相同的接口。用JavaScript编写的程序可以采用不同的形式。在本文中,我们将探讨哪种多态性是什么,它如何适用于JavaScript,不同类型的多态性,在处理多态性时要记住的事情。
让我们想象一下,我们需要编写一个计算区域和周边的程序。为此,我们需要定义计算我们形状的区域和周边的方法;区域()和周边()。然而,几何形状的基本知识告诉我们,我们无法以同样的方式为不同形状的区域和周长求解。例如,圆的周边是2×PI x半径,方形的周边为4×长度。
因此,我们需要将不同的形状定义为基类形状的子类或派生类。因此,我们将拥有一个子类圈,平方,梯形,多边形,所有这些都有它们的方法和不同的参数。我们上面所做的是多态性。我们的班级形状现在具有不同的形式和特征,如圆形,方形,梯形和多边形,作为子类。
多态性来自两个词;多种和态塑,这意味着形式的许多和方差。在编程中,多态性被定义为对象采用不同形式的能力。在下一节中,我们将深入了解JavaScript如何处理多态性。
编程语言实现多态性的方式不同。作为一个例子,Java和JavaScript都是面向对象的编程语言,并且它们不会以相同的方式处理多态性。虽然多态性是面向对象编程语言的核心特征,但是一些数据导向语言实现了与实体组件系统(ECS)模式的多态性。我们还将研究多态性如何与继承和封装有效。
要了解多态性如何在面向对象的编程中工作,如果我们理解面向对象模型的概念,它将是最好的。面向对象的模型依赖于对象和类的概念。这种类型的模型可以通过这个或自我的概念使其数据字段变异。
虽然没有在本文的范围内,我将解释JavaScript的多态性如何通过将面向对象模型中的多态性与作为实体组件系统(ECS)的数据导向编程中的界面和多态性进行比较。
在面向对象的编程中,我们可以创建一个类,该类别使用下面的代码块计算不同形状的区域和周边:
我们可以从上面的代码中使用伪代码中的ECS重新创建计划,该伪表示以数据为导向的语言。
这两个示例之间的差异是,在来自我们的JavaScript代码的面向对象编程中,我们由于接口/抽象而造成了深度继承。然而,在来自我们的伪代码的数据导向编程中,我们使用ECS模型将实体与组件隔离成分以便于检索数据。
让我们更好地了解继承中的javascript是什么以及它与多态性有关的原因。
继承是面向对象编程中多态性的重要特征。让我们来看看汽车对象的一个例子:
现在,我们的汽车对象将为不同的汽车提供不同的子类,如宝马,丰田,宾利等,以及颜色和速度的不同属性:
从我们的示例开始,子类可以占用超类的属性,以定义它。继承可以从现在的家庭到祖父母或甚至曾祖父母。
继承是JavaScript中的一个非常广泛的主题,因为有不同的方法来实现它。例如,有原型,伪像和功能遗传。让我们简要介绍这些继承类型的不同以及它们如何在JavaScript中使用多态性。
原型继承是一种继承类型,可以为现有对象添加新的属性和方法。此继承利用原型对象i.e. object.Prototype
Psiedoclassical继承类似于原型继承。这种类型的继承使用原型继承模拟了经典继承。但是,如果您使用ES6进行编程,则不鼓励使用PsuedClassical继承,因为您可以使用传统类(类关键字)。在psiedoclassical继承中,我们尝试使用函数创建一个旨在用新关键字调用的函数的类。要更好地了解,我们将使用我们的汽车示例。让我们想象我们有一个汽车对象,如下代码所示:
我们可以使用新的关键字创建不同车的子类型,使原型的对象:
使用原型,我们创建了不同的汽车的新对象。接下来,我们将了解如何将原型传递为继承以及它如何影响多态性。
首先,我们将创建一个名为DIANVEUS的函数,我们希望我们的汽车继承:
之后,我们将允许我们的车与原型继承对话函数:
上面的程序应该输出“我是一个带有100万小时的红色丰田”,“我是一个带90英里的绿色宝马”,并在你的控制台中相应地“我是一个白色的宾利速度为120英里的速度”。
功能继承涉及使用使用增强函数来对象实例的继承功能:
由于我们已经更好地了解了多态性工作的继承,因此更容易了解封装如何在多态性上工作。在编程时,需要将数据捆绑或将数据捆绑在一起,使用户无法从外部访问特定对象的变量的状态值。
从下面的示例中,我们通过将数据捆绑在一起并使用基于原型的多态性继承它们来验证学生的标记。
很多人都不明白,抽象和封装之间存在差异。在抽象中,只有在其余隐藏时显示某些信息。虽然在封装中,数据被捆绑成单个实体并隐藏在外部范围内。封装的主要原因是控制和验证数据。就像我们上面的例子一样,学生评分的验证是以学生/公众不能干扰的方式完成的。
JavaScript中有不同类型的多态性。在本节中,我们将讨论为ad-hoc,子类型和参数多态性的三种主要类型。
ad-hoc多态性是一种多态性,可以在不同类型的“观察”时允许值表现出不同的行为。 Ad-hoc多态性可以涉及占用不同形式但承载相同名称的功能。
这种类型的多态性是称为超载的。让我们来看看一种称为操作员重载的ad-hoc多态性。
从上面的示例,操作员+正在占用不同形式的添加数字和连接字符串。
参数多态性是一种多态性,其涉及通用功能和通用数据类型,同时仍然保持静态类型安全性。通用函数和数据类型是可以以一种方式编写的函数或数据类型,以便它们可以类似地处理值,而无需基于其类型对其进行分类。
例如,对象可以存储不同的数据类型。它不会根据其类型区分其值:
从上面的代码中,我们有一个以人安格特命名的对象。该对象包含Ann的名字和姓氏,这些名字是一个字符串,Ann的年龄,这是一个数字,以及一个巢穴不是成年人的布尔值。虽然我们的对象ANN中存在不同的数据类型,但是对象同样处理它们。
另一个快速示例是一个数组。在JavaScript中,数组可以将不同的数据类型作为其元素占用。
就像我们的Object示例一样,我们的数组示例包含了类似地处理的各种数据类型。如果为我们的对象或数组运行console.log(ANN),则应获取元素列表。
在上面的示例中,ID不会根据其类型区分值1和foo。所以,ID可以是不同的数据类型;字符串或数字等
亚型多态性涉及子类型和超型数据类型。这种类型的多态性不应与继承混淆,因为它不涉及从现有对象中创建新对象 - 即使在JavaScript中的这种类型多态性使用大部分继承。相反,这种类型的多态性是关于实现界面并代替不同的实现。
例如,如果一个相对不幸的是死亡并留下了他的书店。您可以阅读那里的所有书籍,如果您愿意,您可以看看书籍,您可以查看已故的帐户,已故的客户名单等。这是继承;你有一个亲戚的一切。继承是一种代码重用的形式。
如果您的亲戚不会在他的意志中为您留下书店,您可以自行重新打开书店,以所有相对的角色和责任携带,增加了自己的一些变化 - 这是亚型;你现在是一个书店所有者,就像你的亲戚一样。
猫,狗和山羊是动物的亚型。动物可以是猫,狗或山羊等。您可以为我们的不同动物替换不同的实施。
我们在这篇文章中概述了多态性,我将在javascript中处理多态性时指出一些令人想到的事情。
1.多态函数影响代码的性能,即,程序运行的快速。例如,与多晶型功能相比,单数函数将更快地运行。在某些情况下,如果它们经常运行,这种性能的差异可能是微不足道的。
2.有时,多态性降低了程序的可读性。为了解决这个问题,重要的是对您的代码发表评论,以便人们可以识别程序的运行时行为。
3.在JavaScript中轻松实现多态,需要了解遗产。这是因为JavaScript中的多态性以遗传为中心。
对于众多JavaScript开发人员来说,需要代码可重用性。这是多态性的特征之一。以前写的代码可以重用。例如,超类人可以由子类员工继承。多态性是JavaScript开发人员的一个组成部分的另一个原因是能够将不同数据类型的值存储在一起。例如,许多JavaScript开发人员熟悉创建数组。您可以创建一个带有不同数据类型的值的数组。快速示例是下面的数组,其具有整数,字符串和布尔值。
在高性能不明显的项目中,设计决定是否使用多态性或不依赖于将使代码更加可扩展和可维护的方法。
在表现最优先事项的情况下,它成为设计和架构决策的主要驱动力。例如,SessionStack的一个组件是将库集成到网站和Web应用程序中的库。该库从浏览器中消耗数据,例如DOM更改,用户交互,JavaScript异常,堆栈痕迹,网络请求和调试消息。之后,SessionStack平台允许团队重播用户旅行作为视频,以优化产品工作流,再现错误或查看用户卡的位置。由于库被集成到其他产品中,因此需要高度优化,不会在运行时造成任何负面性能影响。这意味着避免了多态性和高水平的抽象,而效率和性能是最优先级。另一方面,该平台可以利用抽象和其他方法来使代码容易可扩展。
如果您想尝试一下,有免费试用。