вызов независимого класса файлов с шаблоном модуля javascript (отредактировано) - PullRequest
0 голосов
/ 17 ноября 2018

Я не уверен, что правильно объяснил. У меня есть общий класс, используемый многими * .js файлами скажем TestClass.

class TestClass {   

constructor(a,b) {
    this.a = a || 0;
    this.b = b || 0;        
}
// methods 
suma(a,b)
 {
    return a+b;
 }  
} 

Мне нужно использовать этот «классический» класс из нескольких файлов * .js, построенных с использованием «шаблона модуля»

// const {moduloTest} = require ("scripts / testClass.js"); не работает даже используя ответ в Как включить файл JavaScript в другой файл JavaScript?

// import {TestClass} из "scripts / testClass.js"; не работает (даже с расширением * .mjs)

файл примера:

var MyNameSpace = {};
MyNameSpace = (function () {

  // global variables
  var object1 = new TestClass();

  // Private methods      
  function PrivateMethod () {
   console.log("result = ", object1.suma(3,4));
  }

  //   ..........................................................
  // public methods
  return {
    init: function () {},   
    anotherPublicMethod: function () {}      
  } 
}());  

новая редакция, чтобы показать, как я уже включил вызов пространства имен в очень простой HTML-код

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  <title> module pattern with testClass. </title>

</head>


<!--here the call.-->
<body onload="moduloTest.init();"> 
  <script  src="scripts/ClasePrueba.js"></script>
  <script  src="scripts/modulePattern.js"></script>  

</body>

</html>

1 Ответ

0 голосов
/ 18 ноября 2018

Интересный вопрос. Мне пришлось потратить пару минут, чтобы понять, как это работает. Извините за использование старого синтаксиса модуля, мне было лень настраивать веб-пакет, поэтому мне нужна была среда, которая будет проходить через 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...