如何在JavaScript中为实例化对象提供名称空间

rp.*_*rp. 10 javascript namespaces

我有一个JavaScript"对象",以这种方式构建:

function foo()
{
    this.length = 0;
}

foo.prototype.getLength = function()
{
    return this.length;
}

...
Run Code Online (Sandbox Code Playgroud)

我知道如何使用单例JavaScript对象模拟命名空间,但是什么是"命名空间"对象的最佳方法,如上面的那些将会有什么意义呢?

我知道有几个JavaScript库具有名称间距功能,但我使用的是jQuery,而不想添加其他库.我希望能够提供我自己的,也许是通过利用jQuery,我需要实例化的JS对象的内部命名空间方案.

谢谢rp

Jas*_*ing 12

简单:

if(!MyNamespace) MyNamespace = {};

MyNamespace.foo = function() {
   this.length = 0;
};
MyNamespace.foo.prototype.getLength = function() {
   return this.length;
};
Run Code Online (Sandbox Code Playgroud)


Mar*_*ius 7

Javascript实际上没有像其他语言那样的命名空间或包.相反,它有闭包.如果您的应用程序包含多个函数,变量和对象,那么您应该将它们放在一个全局对象中.这将与命名空间具有相同的效果.

例如:

var namespace = {
  this.foo: function(){
    ...
  },
  this.foo.prototype.getLength: function(){
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

您还可以创建一组嵌套对象并模拟包:

loadPackage = function(){
  var path = arguments[0];
  for(var i=1; i<arguments.length; i++){
    if(!path[arguments[i]]){
      path[arguments[i]] = {};
    }
    path = path[arguments[i]];
  }
  return path;
}

loadPackage(this, "com", "google", "mail") = {
  username: "gundersen",
  login: function(password){
    ...
  }
}
this.com.google.mail.login("mySecretPassword");
Run Code Online (Sandbox Code Playgroud)