私は最初の本物の JS アプリ (タワー ディフェンス ゲーム) を構築していますが、アプリの構造に少し苦労しています。グローバル名前空間を散らかさないことについて読んだので、コードをファイル (モジュール) に分割しながら、すべてのコードを 1 つのグローバル変数に保持したいと考えています。私はこれを行うことができましたが、これで正しい方法で行っているかどうかは疑問です。
私が今抱えている実際の問題は、(実際にはサブモジュールのメソッドであるコンストラクター関数を介して)「エンティティ」オブジェクトを作成すると、名前空間が予想どおり app.entity.type_1 ではなく、 app.entity.entity になることです。 .type_1
/*
** file 1 (included first in html)
*/
var APP = (function (app) {
entity = app.entity || {};
entity.tracker = [];
app.init = function () {
entity.tracker.push(new app.entity.type_1(entity.tracker.length));
entity.tracker.push(new app.entity.type_2(entity.tracker.length));
console.log(entity.tracker[0]);
console.log(entity.tracker[1]);
};
return app;
})(APP || {});
/*
** file 2 (included after file 1 in html)
*/
APP.entity = (function (entity) {
entity.type_1 = function (id) {
this.type = "type 1";
this.id = id;
};
entity.type_2 = function (id) {
this.type = "type 2";
this.id = id;
};
return entity;
})(APP.entity || {});
APP.init();
以下のフィドルをチェックしてください。 http://jsfiddle.net/Percept/8stFC/13/
私の質問は、なぜ「エンティティ」名前空間を繰り返すのですか?どうすればこれを回避できますか?