我目前正在开始研究现有项目。我们有全局命名空间对象FOO
和帮助器来创建一个漂亮的命名空间:
var FOO = FOO || {};
//...
FOO.namespace = function (name) {
var parts = name.split('.'),
parent = FOO,
i;
// strip redundant leading global
if (parts[0] === "FOO") {
parts = parts.slice(1);
}
for (i = 0; i < parts.length; i += 1) {
// create a property if it doesn't exist
if (typeof parent[parts[i]] === "undefined") {
parent[parts[i]] = {};
}
parent = parent[parts[i]];
}
return parent;
};
因为有很多子模块分散在不同人的不同文件上,我注意到在声明新子模块时有不同的模式。
FOO.modulename = {
someMethod: function (param) {
// ...
}
}
var modulename = FOO.namespace('modulename');
modulename.someMethod = function (param) {
// ...
}
var modulename = FOO.namespace('modulename');
FOO.modulename = {
someMethod: function (param) {
// ...
}
}
现在,A显然不是正确的方式,但其他选项呢(我想我会发现至少还有3种方法)。他们都做了同样的事情并且都工作,但哪种方法最“正确”?