我有一个JavaScript "object",是这样构建的:
function foo()
{
this.length = 0;
}
foo.prototype.getLength = function()
{
return this.length;
}
...我知道如何用单例JavaScript对象模拟名称空间,但是让上面提到的对象“命名空间”的最好方法是什么呢?
我知道有几个JavaScript库具有命名功能,但我使用的是jQuery,因此不希望再添加其他库。我希望能够为我需要实例化的JS对象提供我自己的内部命名空间方案,可能是通过利用jQuery。
谢谢rp
发布于 2008-08-22 18:18:31
简单:
if(!MyNamespace) MyNamespace = {};
MyNamespace.foo = function() {
this.length = 0;
};
MyNamespace.foo.prototype.getLength = function() {
return this.length;
};发布于 2008-08-22 19:03:43
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");发布于 2008-08-22 17:41:59
应该没有太大的不同:
namespace.foo = function foo() {...}
namespace.foo.prototype.getLength = function() { ... }或者你可以使用
(function() {
function foo() { ... }
foo.prototype...
namespace.foo = foo;
})();省去一些打字的时间。
https://stackoverflow.com/questions/22976
复制相似问题