我正在构建我的第一个真正的 JS 应用程序(一个塔防游戏),我一直在为我的应用程序结构而苦苦挣扎。我读过关于不要乱扔全局命名空间的文章,所以我想将我的所有代码保存在一个全局变量中,同时仍然能够将我的代码拆分为文件(模块)。我已经设法做到了,但我怀疑我是否采取了正确的方式。
我现在遇到的实际问题是,当我创建“实体”对象(通过实际上是子模块的方法的构造函数)时,命名空间不是我预期的 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/
我的问题是,为什么它会重复“实体”命名空间,我该如何避免这种情况?