Javascript 名称空间和函数声明类型
我目前正在着手现有的项目。我们有全局名称空间对象Javascript 名称空间和函数声明类型,javascript,Javascript,我目前正在着手现有的项目。我们有全局名称空间对象FOO和一个帮助器来创建一个好的名称空间: var FOO = FOO || {}; //... FOO.namespace = function (name) { var parts = name.split('.'), parent = FOO, i; // strip redundant leading global if (parts[0] === "FOO") {
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;
};
B:直接分配的本地别名
C:对子模块的Objectliteral赋值
现在,A显然不是正确的方法,但是其他的选择呢(我想我会发现至少还有3种方法可以做到这一点)。它们都实现了同样的目标,都能工作,但是哪种方法是最“正确”的方法?我认为它们都是正确的,没有一种是“正确的”。一致性是最重要的吗?至少使用B和C,您的名称空间函数可以警告您名称冲突;这似乎是一种非常明显的方法,可以在不知道对象/命名空间是否已经存在的情况下声明它。。太好了,谢谢。我在找这个:var FOO=FOO | |{};这似乎是一种非常明显的方法,可以在不知道对象/名称空间是否已存在的情况下声明它编辑--不起作用。您必须像这样引用全局窗口对象,var FOO=window.FOO | |{};否则会出现ReferenceError错误。
FOO.modulename = {
someMethod: function (param) {
// ...
}
}
var modulename = FOO.namespace('modulename');
modulename.someMethod = function (param) {
// ...
}
var modulename = FOO.namespace('modulename');
FOO.modulename = {
someMethod: function (param) {
// ...
}
}