Javascript命名空间 - 多个级别

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)

这可能吗?我该怎么做?

Jos*_*and 8

以下是我通常的做法:

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)


Tho*_*4no 2

JS 中没有命名空间,但您可以将对象分配给其他对象,例如

x = {};
x.y = {};
x.y.z = function() {};
Run Code Online (Sandbox Code Playgroud)

  • 公平地说,当它们用于组织代码时,它们在 JS 社区中通常被称为“命名空间”。 (4认同)