如何在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对象。在对象外部,我们调用这些函数,并按类似方式打印每个值。
这样,姓名、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上方,以确保在页面加载时可以立即访问任何引用和创建的对象。在任何应用程序中使用命名空间都提高了代码的可读性,并有助于轻松调试。