【发布时间】:2010-08-12 07:34:04
【问题描述】:
我的客户有以下结构;
var myObject = (function(){
var mainObjectList = [];
var globalObject = {
init:function(mainObjectId){
var logger = {};
var utilityObject1 = {};
var utilityObject2 = {};
var mainObject = {};
mainObjectList.push(mainObject);
},//init
someOtherMethods:function(){}
};//globalObject
return globalObject;
})();
我可以和我的客户说 myObject.init(5); 并创建一个新结构。 我的问题是我在 init 函数闭包中有很多实用程序对象(logger、utilityObject1、utilityObject2 ..)。我的总文件超过了 1000 行,所以我想将所有实用程序对象分成不同的文件,以获得更好的项目。例如,我可以将 logger、utilityObject1、utilityObject2 分离到他们自己的文件中。问题是由于对象已关闭,因此我不能仅将它们添加到单独文件中的主对象中。所以我想到了下面的注入方法。
//start of file1
var myObject = (function(){
var mainObjectList = [];
var globalObject = {
init:function(mainObjectId){
var logger;
var utilityObject1 = {};
var utilityObject2 = {};
var mainObject = {};
mainObjectList.push(mainObject);
},//init
someOtherMethods:function(){},
injectLogger:function(creator){
this.logger = creator();
}
};//globalObject
return globalObject;
})();
//start of file2
myObject.injectLogger(function(){return {};});
这样我就可以分离我的文件进行开发。但在生产中,我可以将文件连接成一个文件。但是我对这个设计有一些问题。我刚刚在 myObject 中添加了一个可访问的 injectLogger 函数。我的记录器现在不能在关闭中使用其他局部变量(我现在必须将它们传递给创建者对象)。我的问题是有没有其他方法可以将这种代码分成文件。 (可能是外部实用程序。)
【问题讨论】:
标签: javascript closures