所谓命名空间,就是通过 com.proj.common.dosomething 这样的形式使用和访问脚本。
为什么要这样做?
1。项目很大,应用程序繁杂,使用长路径清晰,容易理解,分门别类;
2。可以方法重名,比如你的项目里可能很多 showABC() 这样的方法,是不是很乱?
使用命名空间 com.proj.a.showABC() 和 com.proj.b.showABC() 就会区分开来;
3。可以将javascript按 包的形式封装起来,和我们 JAVA web 项目里的分层管理趋于一致;
4。有利于代码更新,升级和维护。
命名空间的构造:
/**
* 命名空间的创建
* 支持 xxx.xxx.xxx命名访问
*
*
*/
function NamespacesPrototype() {
function access(c, d, e) {
c[d] = e;
e._path = c._path ? (c._path + "." + d) : d;
e._parent = c;
}
function make(d, f, c) {
var e = f.shift();
if (0 == f.length) {
access(d, e, c());
} else {
if (!d[e]) {
access(d, e, {});
}
make(d[e], f, c);
}
}
this.create = function (nameString, custfun) {
make(window, nameString.split("."), function () {
return new custfun();
});
};
this.register = function (nameString, custfun) {
make(window, nameString.split("."), function () {
return custfun;
});
};
};
/**
* 创建命名空间
*/
var Namespaces;
if (!Namespaces) {
Namespaces = new NamespacesPrototype();
};
//命名空间的自定义
Namespaces.create("com.proj.common", function () {
this.a= 'This is my code';
this.b = function (){
// your method
alert('my method-' + this.a);
};
//TODO orthers code here.
});
//使用
...
com.proj.common.b(); // output 'my method-This is my code'