0

我目前正在开始研究现有项目。我们有全局命名空间对象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 种方法来做到这一点)。他们都实现了相同的目标并且都有效,但是哪种方法是最“正确”的呢?

4

0 回答 0