当前位置:   article > 正文

JavaScript-编程范例与常见编程范式_js 编程范式

js 编程范式

编程范例

编程范例是一种编程风格或软件构建的一种思考方式。所以编程范式并不是指特定的语言或一种语言,而是使用一种语言构建应用程序来解决编程问题的一种方式。因此,它是一种随着时间推移而发展的编程方式,并提供了有效构建软件的模式。JavaScript支持至少三种范式:过程式编程,面向对象编程(OOP)和函数式编程。下面对这三种范式做一个简单的介绍。

过程式编程

过程式编程是JavaScript语言初学者使用的范式类型。它是一种使用线性,自上而下的方法并将数据和过程或函数视为独立事物的编程方式。过程式编程将程序划分为过程和函数,并通过编码告诉计算机如何解决问题。

面向对象编程

面向对象编程通过将编程问题表示为对象的集合来解决编程问题。这些对象协同工作来解决特定问题。每个对象是自我维持的。这些对象包含函数需要的所有组件:数据和行为。因此,将对象从一个程序移动到另一个程序会更容易。

函数式编程

函数式编程是一种更难掌握的范例,这是因为它是声明式编程而不是命令式编程。函数式方法是通过应用和组合函数来指定应该发生什么。该程序由一个函数构建,每个函数返回一个值并为下一个函数提供输入,而不是像我们习惯的那样改变程序状态的一系列命令性语句。

需要注意的是,程序和函数不包含对象这个词并不意味着它们不使用对象,整个JavaScript中都使用对象。函数式方法使用对象,更多的是关于如何使用它们。前端框架React结合了面向对象编程和函数式编程的元素。

编程范例的优势

1,帮助你写更好的代码。当你遵循范例时,你的代码可以提高内存效率,并且更有可能满足不重复的dry原则。

2,更容易理解代码背后的原因。查看基于特定范例之后开发的代码更容易推理,你可以确定正在发生的情况并能更快地使用代码。

3,提供了解决大型编程问题的抽象级别。当你将一个问题应用到一个范式时,它可以帮助你开始将程序分解为易于理解的部分。

4,增进开发者之间的交流。不同的开发人员围绕不同的范式都可用一种相同语言来交流他们想要完成的任务,这促进了开发人员之间更好的沟通。

5,使代码更容易扩展。因为代码结构良好并且遵循范例。当有必要时,扩展会容易的多。

6,使代码更易维护。范例就是提供了多数人熟知并理解的标准,当然更易维护。

三个范式中我们现在着重介绍面向对象编程。

面向对象的主要思想是程序员使用对象构建的。我们可以将对象视为包含数据和行为的实体。编程中的对象确实与现实世界的任何对象没有什么不同。

对象的一个很好的比喻是计算机。计算机有自己的状态,即数据,例如当前打开的内容,正在查看的内容等,并且它有行为。我们通过发送信息要求它执行某些操作,计算机会执行我们要它执行的操作,然后更新计算机的状态。回到对象上,我们向对象发送消息来要求对象为你做某事,并且它会做出响应。对象会使用它本身的数据对数据执行某些操作。我们可能会看到结果,也可能看不到结果,具体取决于对象的编码方式,但这并不意味着对象的状态。数据没有改变。这些对象用于构建你的程序。你可能有其他代码,例如将事物连接在一起的主程序,但对象处理大部分编程任务。

面向对象编程的四个支柱(关键,特征)

1,抽象。简单理解,抽象是用一些方法向用户隐藏一些复杂的东西,使用户能交互和使用对象,而无需了解幕后发生的所有复杂处理。用户只需要知道要访问哪些方法和属性。这有助于降低复杂性并使代码更易于管理。

2,封装。我们在面向对象编程创建的对象实际上是封装单元,因此封装基本上意味着将数据和处理该数据的方法捆绑到一个单元中。在传统的面向对象编程类中,进行封装。当你实例化一个类时,你创建了它的一个实例或者对象。但封装最早发生的地方是在JavaScript创建对象。

3,继承。在传统面向对象编程里的类可以继承其它类的方法和属性。在JavaScript中我们已经讨论过原型,原型继承是JavaScript使用的一项技术,对象可以调用或继承其原型链中任何对象的方法和属性。

4,多态。这个术语意味着同一个属性(方法)有多种形态表示。在JavaScript的面向对象编程中,多态是指在不同对象上调用相同方法并且每个对象以不同方式响应的能力。比如,在JavaScript中,假设我们有两个对象从原型继承相同的方法,可以在对象级别更改该方法,使其表现不同;或者也许同一个方法不是继承的,而是在不同的对象以不同的方式实现。

用工厂函数创建对象

为了在JavaScript中使用面向对象编程,我们需要使用有用的模式来创建对象。否则,我们创建的每个对象都是从头开始创建的,这是非常低效的。工厂函数只是一个调用它返回对象的函数,这个函数非常简单,它很容易思考和推理。

用Object.create()创建对象

Object.create()的目的是使用现有对象作为原型创建一个新对象。

下面举一个应用面向对象编程的例子。

在JavaScript中使用面向对象编程的例子——房间预订系统

公司使用房间预订系统来管理它们的房间。可以看到有四个房间对象,一个原型对象(meetingRooms)。每个房间都有数据(属性)和行为(方法),这些数据和行为我们放在原型对象就可以节约空间,不必在每个对象上重复。我们开始研究在JavaScript中使用面向对象编程范例的技术时,我们将使用这种类型的示例。

在JavaScript中我们使用工厂函数来创建房间。该函数传入两个属性name和capacity,这是创建一个房间对象所必须的两个属性。我们希望执行createRoom方法,最终传出一个包含传入的两个数据的房间对象,并且它还可能具有其它属性和方法。在该工厂函数的返回对象中,我们使用简单定义属性的方法,省略属性名,直接写传入参数名,JS引擎会以传入参数的变量名创建为对象的属性并将传入参数的值设为对象的属性值。其中,返回对象的预订方法(reserve),使用到了抽象。两个参数dtm和len分别是预定时间和时长,因为不同的会议长度不同,我们都要处理。这个reserve方法使用到了抽象,因为调用reserve方法很简单,只需传入两个参数,但是具体的实现过程隐藏在函数体里了。这里的话具体的实现过程是向返回对象的schedule属性添加存了dtm和len的对象。最后我们使用工厂函数创建了boardRoom(董事长会议室)和训练室A,这也是使用工厂函数的主要用途,创建多个 同类对象。

这里也用到了封装,因为这些属性和方法都封装到一个对象中了。

接下来我们使用boardRoom对象的reserve方法预订会议室。该方法作用于该对象的状态,修改数据。

再举一个用静态方法Object.create()创建对象的例子

使用Object.create()在控制台创建新对象obj,这里以空白对象为原型。打印创建的对象obj,可以发现,obj的原型是空对象,但obj的原型的原型就是一个正常的Object,里面有构造函数等基本对象的属性。因此我们创建的obj对象自动连接到了原型链。

现在我们为空对象obj添加name属性,此时我们仍然连接着原型。因此,添加了属性后原型作为对象的一部分会继续为我们提供于对象中。

前面我们使用空对象为原型对象创建对象,现在我们使用具体的对象创建对象。接下来我们创建原型对象objProto,里面有个greet方法,在控制台输出语句中输出模板字符串并抓取设objProto为原型对象的对象的name属性。再用Object.create()来创建使用该原型的对象obj。再为obj添加name属性。执行代码,输入obj并展开,可以发现obj的原型有greet方法,说明我们成功设置obj的原型为objProto。再在控制台执行obj.greet(),obj调用其原型的方法执行,原型的greet方法成功抓取到obj的name属性值。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/874381
推荐阅读
相关标签
  

闽ICP备14008679号