Dis*_*ile 7 javascript javascript-namespaces
我目前正在执行以下操作来为我的javascript代码提供命名空间:
(function(foo, $, undefined) {
// function: showNoteDialog
foo.showNoteDialog = function() {
// ...
}
}(window.foo = window.foo || {}, jQuery));
Run Code Online (Sandbox Code Playgroud)
我更喜欢的不是:
foo.showNoteDialog()
Run Code Online (Sandbox Code Playgroud)
是拥有多级命名空间:
foo.notes.showDialog()
foo.other.showDialog()
Run Code Online (Sandbox Code Playgroud)
这可能吗?我该怎么做?
以下是我通常的做法:
var TopLevel = TopLevel || {}; //Exentd or Create top level namespace
TopLevel.FirstChild = TopLevel.FirstChild || {}; //Extend or Create a nested name inside TopLevel
Run Code Online (Sandbox Code Playgroud)
使用此方法可以保证文件之间的安全.如果TopLevel已经存在,您将它分配给TopLevel变量,如果不存在,您将创建一个可以扩展的空对象.
因此,假设您要创建一个存在于Application命名空间中并在多个文件中扩展的应用程序,您可能需要这样的文件:
文件1(库):
var Application = Application || {};
Application.CoreFunctionality = Application.CoreFunctionality || {};
Application.CoreFunctionality.Function1 = function(){
//this is a function
}//Function1
Run Code Online (Sandbox Code Playgroud)
文件2(库):
var Application = Application || {};
Application.OtherFunctionality = Application.OtherFunctionality || {};
Application.OtherFunctionality.Function1 = function(){
//this is a function that will not conflict with the first
}
Run Code Online (Sandbox Code Playgroud)
文件3(工人):
//call the functions (note you could also check for their existence first here)
Application.CoreFunctionality.Function1();
Application.OtherFunctionality.Function1();
Run Code Online (Sandbox Code Playgroud)
JS 中没有命名空间,但您可以将对象分配给其他对象,例如
x = {};
x.y = {};
x.y.z = function() {};
Run Code Online (Sandbox Code Playgroud)