命名空间和函数声明类型

时间:2013-04-11 11:00:19

标签: javascript

我目前正在开始研究现有项目。我们有全局命名空间对象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) {
        // ...
    }
}

B:直接分配的本地别名

var modulename = FOO.namespace('modulename');
modulename.someMethod = function (param) {
    // ...
}

C:对子模块的
var modulename = FOO.namespace('modulename');
FOO.modulename = {
    someMethod: function (param) {
        // ...
    }
}

现在,A显然不是正确的方式,但其他选项呢(我想我会发现至少还有3种方法)。他们都做了同样的事情并且都工作,但哪种方法最“正确”?

0 个答案:

没有答案