📜  JavaScript |模块

📅  最后修改于: 2022-05-13 01:58:09.777000             🧑  作者: Mango

JavaScript |模块

在上一篇关于 javascript 中的闭包的文章中,我们了解到闭包是 Javascript 中最重要但最容易被误解的概念之一。闭包是一种方法,其中函数函数执行之后也可以保持其父作用域的环境,我们可以说它是记住或重新创建已经执行过一次的作用域及其成员。

现在 JavaScript 模块是 Closure 的最佳实现。模块是独立的、可重用的代码的小单元,希望在创建一个重要的 Javascript 应用程序时用作构建块。模块让开发人员可以分别定义私有成员和公共成员,使其成为 JavaScript 范式中更受欢迎的设计模式之一。您可以将模块视为任何其他面向对象编程语言中的类。

注意:在 ES2015 中,class 关键字用于定义 Javascript 中的类,但即使 JavaScript 仍然是一种无类编程语言,而 ES2015 类基本上是特殊功能。

回到 Modules 让我们首先看一个例子,看看 Modules 能做什么,我们将尝试模拟 Rectangle 类的行为,给出两侧的长度并取回面积。


输出:

Area: 20
Perimeter: 18

此处,Rectangle()函数用作包含所需变量(即长度、宽度)以及函数 create()、getArea() 和 getPerimeter() 的外部作用域。所有这些加起来就是这个的私密细节
无法从外部访问/修改的矩形模块。另一方面,公共 API 顾名思义是一个由三个函数成员组成的对象,并在 Rectangle函数执行完成时返回。使用 API 方法,我们可以创建并获取矩形的面积和周长的值。

注意:正如我们之前提到的,模块是任何其他 OOP 语言中最接近类的概念,许多开发人员在创建 Rectangle Module 的新实例时可能会喜欢使用“new”关键字。 Rectangle() 只是一个函数,不是要实例化的适当类,所以它只是正常调用。使用 new 是不合适的,实际上是浪费资源。

执行 Rectangle() 创建一个 Rectangle 模块的实例,并创建一个全新的范围并分配给函数,因此生成了函数成员的新实例,因为我们将它分配给了一个变量,现在该变量有了对允许的公共 API 成员的引用。因此,我们可以看到运行 Rectangle() 方法会创建一个与之前的任何其他实例完全分离的新实例。

所有成员函数在长度和宽度上都有一个闭包,这意味着这些函数即使在 Rectangle()函数执行完成后也可以访问它们。

这总结了模块在 JavaScript 中的工作方式。我们将很快发现更多关于 JavaScript 的有趣话题,并制作相关项目来磨练我们新学到的技能。