我正在学习如何将程序拆分为可在浏览器中使用的多个javascript文件–请参阅下面的代码。我想在MODULE
中访问MODULE.Submodule
中的私有变量和方法(反之亦然)。显而易见的答案是,我应该在MODULE
中公开这些变量和方法。当然,如果我将它们公开,那么它们将不再是私有的。当我将所有代码都放在一个文件中时,现在MODULE.SubModule
中的方法可以访问所有私有变量。我想复制该功能。也就是说,每个模块中的私有变量和方法对所有模块(或者更好的是对特定模块)保持私有,而只有所有模块中的公共变量和方法才公开。
我找到了一些有关如何实现拆分的教程,但似乎都没有解决这个特定问题的方法-在一个模块中同时在浏览器中浏览器中访问一个模块中的私有变量和方法。 >
// in module.js
let MODULE = (function () {
const privateVar = 'foo';
return {
publicVar: 'bar',
// should return foo -> works
publicMethod: function () { return privateVar; };
};
})();
// in module-submodule.js
MODULE = (function (my) {
const privateVar = 'baz';
my.SubModule = {
// should return baz -> works
publicMethod: function () { return privateVar },
// should return foo from parent MODULE -> DOES NOT work
superPublicMethod: function() { return my.privateVar}
}
return my;
})(MODULE || {});
console.log(MODULE.publicMethod()); // return 'foo'
console.log(MODULE.SubModule.publicMethod()); // returns 'baz'
console.log(MODULE.SubModule.superPublicMethod()); // returns 'undefined'