Интересный вопрос. Мне пришлось потратить пару минут, чтобы понять, как это работает. Извините за использование старого синтаксиса модуля, мне было лень настраивать веб-пакет, поэтому мне нужна была среда, которая будет проходить через VSCode & node. Я предполагаю, что он будет работать и с новым синтаксисом импорта / экспорта:
Файл 'Module' , упрощенный, чтобы служить минимальным примером:
module.exports = {
MyNameSpace: (function() {
//global variables
var p1 = 0;
// Private methods
function private() {
return 'whatever';
}
// Public methods
function public() {
p1 += 1;
return p1;
}
return {
public: public
};
})()
};
Файл, в который мы импортируем «Модуль»:
// Destructurizing is recommended, otherwise we need to call
// our methods like MyNameSpace.MyNameSpace.init()
const { MyNameSpace } = require("./Module.js");
console.log(MyNameSpace) // public: [Function: public] <-- No private methods or vars!
console.log(MyNameSpace.public()); // 1
console.log(MyNameSpace.public()); // 2
console.log(MyNameSpace.public()); // 3
Редактировать Код, показывающий, как прикрепить TestClass
к глобальному объекту, чтобы он был доступен для других сценариев (не требуется импорт / экспорт или связывание):
HTML
Важной частью является то, что скрипт с разделяемым классом загружается первым и синхронно. Затем при подключении к глобальному объекту он становится доступным для всех остальных.
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title> module pattern with testClass. </title>
<script src="./TestClass.js"></script>
</head>
<script>
alert(window.testClass.suma(1,2))
</script>
<body>
</body>
</html>
JS
class TestClass {
constructor(a, b) {
this.a = a || 0;
this.b = b || 0;
}
// methods
suma(a, b) {
return a + b;
}
}
window.testClass = new TestClass();