Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 名称空间和函数声明类型_Javascript - Fatal编程技术网

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) {
        // ...
    }
}