首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JavaScript中为命名空间提供实例化对象

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

Stack Overflow用户
提问于 2008-08-22 17:37:07
回答 5查看 9.8K关注 0票数 11

我有一个JavaScript "object",是这样构建的:

代码语言:javascript
复制
function foo()
{
    this.length = 0;
}

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

...

我知道如何用单例JavaScript对象模拟名称空间,但是让上面提到的对象“命名空间”的最好方法是什么呢?

我知道有几个JavaScript库具有命名功能,但我使用的是jQuery,因此不希望再添加其他库。我希望能够为我需要实例化的JS对象提供我自己的内部命名空间方案,可能是通过利用jQuery。

谢谢rp

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-08-22 18:18:31

简单:

代码语言:javascript
复制
if(!MyNamespace) MyNamespace = {};

MyNamespace.foo = function() {
   this.length = 0;
};
MyNamespace.foo.prototype.getLength = function() {
   return this.length;
};
票数 12
EN

Stack Overflow用户

发布于 2008-08-22 19:03:43

Javascript并不像其他语言那样真正具有名称空间或包。相反,它有闭包。如果您有一个由多个函数、变量和对象组成的应用程序,那么您应该将它们放在一个全局对象中。这将具有与命名空间相同的效果。

例如:

代码语言:javascript
复制
var namespace = {
  this.foo: function(){
    ...
  },
  this.foo.prototype.getLength: function(){
    ...
  }
}

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

代码语言:javascript
复制
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");
票数 8
EN

Stack Overflow用户

发布于 2008-08-22 17:41:59

应该没有太大的不同:

代码语言:javascript
复制
namespace.foo = function foo() {...}
namespace.foo.prototype.getLength = function() { ... }

或者你可以使用

代码语言:javascript
复制
(function() {
  function foo() { ... }
  foo.prototype...
  namespace.foo = foo;
})();

省去一些打字的时间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档