如何在 JavaScript 中声明命名空间?
命名空间是一个编程概念,它为标识符(类型、函数、变量等的名称)提供作用域,以避免名称冲突。例如,程序可能需要在许多上下文中使用相同的变量名。在这种情况下,命名空间将分离这些上下文,以便可以在许多命名空间中使用相同的标识符。
本教程将介绍 JavaScript 中命名空间的初始化和应用。JavaScript 中默认情况下没有命名空间。构建一个包含所有函数和变量的全局对象,可以重复使用 JavaScript 命名空间功能。由于现代 Web 应用程序使用了许多库和组件,因此应使用命名空间来避免代码中的混淆。
使用对象字面量表示法创建命名空间
在这种方法中,我们将使用对象字面量表示法。
在对象字面量表示法中,JavaScript 命名空间只能声明一次,并且只能在该命名空间内编写函数。
这可以比作一个具有键值对集合的对象,其中键也可以代表新的命名空间,在每对键值之间使用冒号分隔。
对象字面量的优点是它们有助于正确组织代码和参数,同时不会污染全局命名空间。
如果您想要设计可以扩展以启用深度分层且易于阅读的结构,它们非常有用。
与简单的全局变量相反,对象字面量通常还会考虑检查是否存在具有相同名称的变量,从而大大降低了发生冲突的可能性。
语法
第一步是初始化一个空的命名空间 -
Var <namespace> = { };
然后可以使用以下方法访问命名空间的变量 -
<namespace>.<identifier>
方法
我们创建一个名为“student”的对象,然后在其中声明了两个函数getStudentName()和getStudentAddress()。
在getStudentName()函数内部,我们有一个变量初始化为学生的姓名并返回它。
在getStudentAddress()函数内部,我们有一个变量初始化为学生的地址并返回它。
在对象外部,我们调用这些函数,并且类似地打印每个值。
这样,studentName和studentAddress就在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 的上方,确保在页面加载时立即访问任何引用和创建的对象。在任何应用程序中使用命名空间都提高了代码的可读性,并有助于轻松调试。