yil*_*yin 6 javascript closures
我的客户有以下结构;
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;
})();
Run Code Online (Sandbox Code Playgroud)
和我的客户我可以说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 {};});
Run Code Online (Sandbox Code Playgroud)
这样我就可以分开我的文件进行开发了.但在生产中我可以连接文件以拥有一个文件.但是这个设计有些问题.我刚刚在myObject中添加了一个可访问的injectLogger函数.并且我的记录器现在不能在闭包中使用其他局部变量(我现在必须将它们传递给creator对象).我的问题是有没有其他方法将这种代码分成文件.(也许是一个外部工具.)
我喜欢使用谷歌的闭包编译器http://code.google.com/closure/compiler/
如果你不想使用类似的东西,你可以尝试这样的事情:(确保你首先加载 globalObject.js 来定义变量)。
//globalObject.js
var globalObject = function() {
}
//init.js
globalObject.prototype.init = function() {
this.utilityFunction();
//do something with utilityObject1
this.utilityFunction(this.utilityObject1);
}
//utilityFunction.js
globalObject.prototype.utilityFunction= function() {}
//utilityObject1.js
globalObject.prototype.utilityObject1 = {};
//main.js
var myObject = new globalObject();
myObject.init();
Run Code Online (Sandbox Code Playgroud)
然后您可以通过执行以下操作来覆盖该函数:
//main.js
var myObject = new globalObject();
myObject.utilityFunction = function() {
//new function
}
myObject.init(); // This will then use the new utilityFunction method you just set.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |