我目前正在开始研究现有项目。我们有全局命名空间对象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;
};
因为有许多子模块分布在不同的人正在处理的不同文件中,所以我注意到声明新子模块的不同模式。
A:直接创建
FOO.modulename = {
someMethod: function (param) {
// ...
}
}
B:直接赋值的本地别名
var modulename = FOO.namespace('modulename');
modulename.someMethod = function (param) {
// ...
}
C: 对子模块的 Objectliteral 赋值
var modulename = FOO.namespace('modulename');
FOO.modulename = {
someMethod: function (param) {
// ...
}
}
现在,A 显然不是正确的方法,但其他选项呢(我想我会发现至少 3 种方法来做到这一点)。他们都实现了相同的目标并且都有效,但是哪种方法是最“正确”的呢?