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

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

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

...

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

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

谢谢rp

===============>>#1 票数:12 已采纳

简单:

if(!MyNamespace) MyNamespace = {};

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

===============>>#2 票数:7

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

例如:

var namespace = {
  this.foo: function(){
    ...
  },
  this.foo.prototype.getLength: function(){
    ...
  }
}

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

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");

===============>>#3 票数:2

不应该有太大的不同:

namespace.foo = function foo() {...}
namespace.foo.prototype.getLength = function() { ... }

或者你可以使用

(function() {
  function foo() { ... }
  foo.prototype...
  namespace.foo = foo;
})();

保存一些打字。

===============>>#4 票数:2

这两个答案都非常有帮助! 这是我最终得到的:

if( typeof( rpNameSpace ) == "undefined" ) rpNameSpace = {};

rpNameSpace.foo = function() {
    this.length = 613;
}
rpNameSpace.foo.prototype.getLength = function() {
    return this.length * 2;
}

然后,使用生成的“命名空间”对象:

var x = new rpNameSpace.foo()

display( x.getLength() );

===============>>#5 票数:-1

另一种选择可能是bob.js框架:

bob.ns.setNs('myApp.myFunctions', { 
    say: function(msg) {  
        console.log(msg); 
    } 
}); 

//sub-namespace
bob.ns.setNs('myApp.myFunctions.mySubFunctions', { 
    hello: function(name) { 
        myApp.myFunctions.say('Hello, ' + name); 
    } 
}); 

//call:
myApp.myFunctions.mySubFunctions.hello('Bob'); 

  ask by rp. translate from so

未解决问题?本站智能推荐:

1回复

如何在javascript中调用实例化的类'函数?

说实话,我可以调用函数,但只是硬编码方式。 而不是硬编码提交绑定我的getData函数,我想通过参数调用函数。 请帮帮我,怎么做。 谢谢。 在xModal.js中 这个函数应该调用xForm中的getData(这里是xForm的片段) 更新: 我想我刚刚
4回复

如何在JavaScript中创建名称空间?

我想通过使用访问变量 可以全球访问。 我相信Drupal会做类似的事情,不是吗?
2回复

如何在javascript中获取xml名称空间

我的xml是 我通过使用函数getChildText("pcm")获得了值{"message":"test_message"} 。 但是我试图检索名称空间xmlns值。 我尝试了以下如何获取XML名称空间? , 如何在SQL Server的XQuery中获取特定的XML名称空间
26回复

如何在JavaScript中声明名称空间?

如何在JavaScript中创建名称空间,以使我的对象和函数不会被其他同名对象和函数覆盖? 我使用了以下内容: 有没有更优雅或更简洁的方法?
3回复

JavaScript名称空间对象文字

最近,我遇到了JavaScript命名空间,以及如何使用它们来像其他流行的OOP语言一样创建命名空间。 我对如何声明它们感到困惑。 例如, var myNamespace = myNamespace || {}; 如果尚未创建名为myNamespace的名称空间,则创建一个名称空
1回复

IntelliSense中的JavaScript名称空间引用

我正在学习如何将我的所有JS放在一个名称空间中,以及如何将其他内容添加到同一名称空间中。 我正在使用带有MVC页面的VS 2013。 在这里,我首先在带有一些属性的namespace.js创建skillet ,然后在namespace2.js添加另一个属性。 正如您在添加两个JS后
1回复

了解JavaScript中的名称空间[重复]

这个问题已经在这里有了答案: 如何在回调中访问正确的“ this”? 10个答案 “ this”关键字如何工作? 22个答案 尽管我对Python有一定的编程经验,但我对JavaScript还是很陌生。 我的问题是,我似乎不了解JS中的名称空间概念,
2回复

JavaScript名称空间

在JavaScript中,从一个命名空间访问另一个函数或属性的最佳方法是哪种? 例:
2回复

在javascript中创建名称空间

您知道如何在javascript中为构造函数对象创建名称吗? 我有个小提琴,请看一下。 http://jsfiddle.net/m8jLoon9/2/ 例如
2回复

如何在Javascript名称空间脚本中创建函数数组

我正在尝试在脚本中使用一系列函数。 我使用命名空间对象,当我使用此数组时,我的所有函数都是undefined 。 如何使用良好的函数引用创建此数组以处理processAllFunction ? 看我的代码: