如何在 JavaScript 中声明命名空间?


命名空间是一个编程概念,它为标识符(类型、函数、变量等的名称)提供作用域,以避免名称冲突。例如,程序可能需要在许多上下文中使用相同的变量名。在这种情况下,命名空间将分离这些上下文,以便可以在许多命名空间中使用相同的标识符。

本教程将介绍 JavaScript 中命名空间的初始化应用。JavaScript 中默认情况下没有命名空间。构建一个包含所有函数和变量的全局对象,可以重复使用 JavaScript 命名空间功能。由于现代 Web 应用程序使用了许多库和组件,因此应使用命名空间来避免代码中的混淆。

使用对象字面量表示法创建命名空间

在这种方法中,我们将使用对象字面量表示法。

对象字面量表示法中,JavaScript 命名空间只能声明一次,并且只能在该命名空间内编写函数。

这可以比作一个具有键值对集合的对象,其中键也可以代表新的命名空间,在每对键值之间使用冒号分隔。

对象字面量的优点是它们有助于正确组织代码和参数,同时不会污染全局命名空间。

如果您想要设计可以扩展以启用深度分层且易于阅读的结构,它们非常有用。

与简单的全局变量相反,对象字面量通常还会考虑检查是否存在具有相同名称的变量,从而大大降低了发生冲突的可能性。

语法

第一步是初始化一个空的命名空间 -

Var <namespace> = { };

然后可以使用以下方法访问命名空间的变量 -

<namespace>.<identifier>

方法

  • 我们创建一个名为“student”的对象,然后在其中声明了两个函数getStudentName()getStudentAddress()

  • getStudentName()函数内部,我们有一个变量初始化为学生的姓名并返回它。

  • getStudentAddress()函数内部,我们有一个变量初始化为学生的地址并返回它。

  • 在对象外部,我们调用这些函数,并且类似地打印每个值。

  • 这样,studentNamestudentAddress就在student下命名空间化:student.getStudentName()student.getstudentAddress()

示例

在下面的示例中,我们使用了对象字面量表示法在 JavaScript 中声明命名空间。

<html>
<head>
   <title> JavaScript Namespace </title>
</head>
<body>
   <h2> Namespace with Object Literal Notation </h2>
   <script>
      var student = {
         getStudentName: function() {
            var studentName = "Vivek Kumar lives in ";
            return studentName;
         },
         getstudentAddress: function() {
            var studentAddress = "Kota, India";
            return studentAddress;
         }
      };
      document.write(student.getStudentName());
      document.write(student.getstudentAddress());
   </script>
</body>
</html>

在上面的输出中,用户可以观察到,当引用学生姓名和地址时,它们会被打印出来。

带参数的命名空间

在这种方法中,我们将看到带参数的命名空间声明。使用返回表示模块公共接口的对象的函数包装器,命名空间使其功能能够包含在全局作用域内。立即调用该函数并将输出分配给命名空间变量。动态命名空间,通常称为命名空间注入,适用于此命名空间。它由一个在函数包装器内部专门引用的代理表示。在这里,我们将为自执行函数提供命名空间参数。


语法

让我们看下面的示例以更好地理解此方法。


var <name> = {};
(function(variable) {
   <name>.variable= function() {
   var x = "ABCD";
   return x;
};

方法

  • 我们创建一个名为student的对象。在这里,我们在函数内部声明了一个名为professor的命名空间。

  • 然后,我们在其中声明了三个函数getStudentName()、getStudentAddress() 和getStudentLOB()

  • getStudentName()函数内部,我们有一个变量初始化为学生的姓名并返回它。

  • getStudentAddress()函数内部,我们有一个变量初始化为学生的地址并返回它。

  • getStudentLOB()函数中,我们正在初始化学生工作的公司。

  • 当我们关闭函数时,会引用对象student。在对象外部,我们调用这些函数,并且类似地打印每个值。

  • 这样,name、LOB和address就在student下命名空间化:student.getStudentName()、student.getstudentAddress()和student.getstudentLOB()。

示例

下面的示例演示了使用命名空间作为参数的 JavaScript 命名空间概念。

<html>
<head>
   <title> JavaScript Namespace </title>
</head>
<body>
   <h1>Namespace as argument </h1>
   <script>
      var student = {};
      (function(professor) {
         professor.getStudentName = function() {
            var name = "Milind living in ";
            return name;
         };
         professor.getStudentAddress = function() {
            var address = "Mumbai, India works with ";
            return address;
         };
         professor.getstudentLOB = function() {
            var LOB = "Microsoft";
            return LOB;
         }
      })(student);
      document.write(student.getStudentName());
      document.write(student.getStudentAddress());
      document.write(student.getstudentLOB());
   </script>
</body>
</html>

用户可以观察到,命名空间作为参数提供。name、address和LOB从对象外部访问并打印。

结论

我们学习了在 JavaScript 中声明命名空间的两种方法。第一种方法是对象字面量表示法,第二种方法是在我们可以提供命名空间作为参数时。在 JavaScript 中,在 Web 应用程序上工作时,命名空间提供了隔离和免受其他 JavaScript 代码的影响。当表达命名空间时,“覆盖”了我们可能没有意识到的相同变量。

使用命名空间的 JavaScript 代码组织性更好,并且更易于阅读、理解和根据需要进行调整。由于我们正在使用命名空间函数和定义,因此网页的脚本应保持在页面 HTML 的上方,确保在页面加载时立即访问任何引用和创建的对象。在任何应用程序中使用命名空间都提高了代码的可读性,并有助于轻松调试。

更新于: 2022-07-22

4K+ 次查看

开启你的职业生涯

通过完成课程获得认证

开始学习
广告