[JavaScript] JSON-Datei per HTTP-Request holen und parsen

// Link zur JSON-Datei
let sURL = 'https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json';
// Request-Object
let request = new XMLHttpRequest();
// MIME-Typen
// txt: "text/plain"
// html: "text/html"
// json: "application/json"
request.overrideMimeType('application/json');
// Requestmethode
request.open('GET', sURL, true);
// Datentyp
request.responseType = 'text';
// Handler für asyncrone Antwort des Requests
// wenn Daten erfolgreich geladen
request.onload = function() {
  console.log('onload()');
  // gesamte Response ausgeben
  let sJSON = request.response;
  console.log(sJSON);
  
  // JSON-Daten parsen
  let oJSON = JSON.parse(sJSON);
  // Wert eines Attributes ausgeben
  console.log(oJSON.homeTown);
};
// bei Änderung des Ready-States
request.onreadystatechange = function () {
  console.log('onreadystatechange()');
  console.log(request.readyState);
  console.log(request.status);
  console.log(request.statusText);
};
// Request absenden
request.send();

[JavaScript] Eine Klasse definieren

Klassendefinition ab ES6

// https://javascript.info/class
// https://javascript.info/property-accessors
class Rechteck
{
  // Konstruktor
  constructor(h, b) {
    this.h = h;
    this.b = b;
  }
   
  // public Properties
  get flaeche() {
    return this.Flaeche();
  }
 
  set hoehe(value) {
    this.h = value;
  }
  
  set breite(value) {
    this.b = value;
  }
  
  // public Methoden
  Flaeche() {
    return this.h * this.b;
  }
  
  // statische Methoden
  static Calc(h, b) {
    return h * b;
  }
}
 
const q = new Rechteck(10, 10);
 
console.log(q.flaeche);
q.hoehe = 5;
console.log(q.Flaeche());
console.log(Rechteck.Calc(2, 3));
console.log(Object.getOwnPropertyNames(Rechteck.prototype));

herkömmlich über “function”

function Rechteck(h, b)
{ 
    this.h = h;
    this.b = b;
   
    Rechteck.prototype.Flaeche = function() {
      return this.h * this.b;
    }
}
 
let q = new Rechteck(10, 10);
 
console.log(q.Flaeche());
console.log(Object.getOwnPropertyNames(Rechteck.prototype));

[JavaScript] DOM: Buttonklick realisieren

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0;">
  <title>DOM Buttonclick</title>
  <script>
  // Strict mode
  'use strict';

  // https://wiki.selfhtml.org/wiki/JavaScript/Module_und_Kapselung
  // private Scope deklarieren
  // anonyme Funktion 1
  (
      // anonyme Funktion 2
    function ()
    {
      // Initialisierung
      function init() {
        let btn = document.getElementById('btnTestButton');

        if (btn) {
          btn.addEventListener(
            "click",
            function () { txtout(); }
          );
        }
      }

      // Textausgabe
      function txtout() {
        let txt = document.getElementById("textfeld");
        if (txt) {
          txt.innerHTML = "Test1";
        }
      }

      // Event-Listener
      document.addEventListener(
        "DOMContentLoaded",
        function () { init(); }
      );
    }
    
    // Aufruf der inneren anonymen Funktion 2
    ()
  );
  </script>
</head>
<body>
    <p>Button klicken!</p>
    <button type="button" id="btnTestButton">Klick!</button>
    <div id="textfeld"></div>
</body>
</html>

[JavaScript] Fortgeschrittene Objektdefinition: Revealing Module Pattern (Kapselung plus öffentliche Schnittstelle)

// https://wiki.selfhtml.org/wiki/JavaScript/Module_und_Kapselung

// Klasse / Modul definieren
// Grundmodul
let oModule = (function() {
  // private
  let priv1 = 100;
  let priv2 = 200;
   
  function priv_func1(var1, var2) {
    return var1 + var2 + priv1;
  }
 
  function priv_func2(var1, var2) {
    return var1 + var2 + priv2;
  }
   
  // public 
  return {
    public_func1: function(var1, var2) {
      return priv_func1(var1, var2) + priv_func2(var1, var2);
    }
  };
 
})();

// Erweiterung des Grundmoduls um public und private Methoden
(function (module) {
  // private
  let priv3 = 200;
  
  function priv_func3(var1, var2) {
    return var1 + var2 + priv3;
  }
  
  // public
  module.public_func2 = function(var1, var2) {
    return priv_func3(var1, var2);
  };
})(oModule);

// ok -> 306
console.log(oModule.public_func1(1, 2));
// ok -> 203
console.log(oModule.public_func2(1, 2));
// undefined
console.log(oModule.priv1);
// undefined
console.log(oModule.priv3);
// "error"
console.log(oModule.priv_func1(1, 2));
// "error"
console.log(oModule.priv_func3(1, 2));

[JavaScript] Klassendeklaration über “function”

Variante 1 (public)

// https://www.phpied.com/3-ways-to-define-a-javascript-class/
// https://developer.mozilla.org/de/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript

// Klasse Person über "function" abbilden
function Person(vorname, nachname, alter) {
  this.Vorname = vorname;
  this.Nachname = nachname;
  this.Alter = alter;
  this.getText = function(type){
    var text = "";
     
    switch (type) {
      case "1":
        text = this.Vorname;
        break;
      case "2":
        text = this.Nachname;
        break;
      case "3":
        text = this.Alter;
        break;
      default:
        text = "-";
        break;
    }
     
    return text;
  };
}

var p = new Person("Udo", "Mustermann", 30);

// Datenausgabe
console.log(p.getText("1"));

Variante 2 (private und public)

function User() {

  // private
  a = 1;
  
  function private() {
    return a;
  }

  // public
  this.b = 2;

  this.public = function() {
    return this.b;
  };
}

let u = new User();
// error
//u.private();
// undefined
console.log(u.a);
// 2
console.log(u.b);
// 2
console.log(u.public());