如何在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对象。在对象外部,我们调用这些函数,并按类似方式打印每个值。

  • 这样,姓名、LOB和地址就在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>

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

结论

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

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

更新于:2022年7月22日

4K+ 浏览量

启动你的职业生涯

完成课程获得认证

开始学习
广告