私は現在、既存のプロジェクトに取り組み始めています。グローバル名前空間オブジェクト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: サブモジュールへのオブジェクトリテラルの割り当て
var modulename = FOO.namespace('modulename');
FOO.modulename = {
someMethod: function (param) {
// ...
}
}
さて、A は明らかに正しい方法ではありませんが、他のオプションについてはどうですか (それを行う方法が少なくともあと 3 つ見つかると思います)。それらはすべて同じことを達成し、すべて機能しますが、どの方法が最も「正しい」ものですか?