Я учусь разделять мою программу на несколько файлов 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'