【发布时间】:2014-06-06 14:44:54
【问题描述】:
也许这是解决我问题的错误方法,但这就是我在这里的原因。下面的代码是带有子模块的 JavaScript 模块模式示例。当我构建这个时,我意识到一些子模块需要“调用”彼此的方法。
我知道使用完整的调用 admin.subModuleB.publicB_2(); 是错误的,但这是唯一的方法,因为 IIFE 函数在实例化之前不能调用“它们自己”,例如。 “模块”在主命名空间中不可用,等等......
我的想法是这种模式不适合我的情况。模块封装的目的是保持私密性,除非被陶醉。那么什么是更好的模式呢?
var module = (function($, window, document, undefined) {
return {
subModuleA : (function() {
var privateA = 100;
return {
// We have access to privateA
publicA_1 : function() {
console.log(privateA);
// How do I use a method from publicB_1
// the only way is:
module.subModuleB.publicB_2();
// but I don't want to use "module"
},
publicA_2 : function() {
console.log(privateA);
}
}
})(),
subModuleB : (function() {
var privateB = 250;
return {
// We have access to privateB
publicB_1 : function() {
console.log(privateB);
},
publicB_2 : function() {
console.log(privateB);
// I have access to publicB_1
this.publicB_1();
}
}
})()
}
})(jQuery, window, document);
【问题讨论】:
标签: iife javascript