ROGA: JavaScript

Beitrag lesen

Lieber Felix,

aus Sicht von JavaScript greifst Du mit PVA.Batterie auf eine Eigenschaft namens Batterie des in der Variablen PVA gespeicherten Objektes zu. Diese Eigenschaft muss natürlich existieren, weil Du sie in diesem Objekt angelegt hast:

Auch dein Erklärungsansatz hat mir für das Verständnis von JavaScript Objekten sehr weitergeholfen.

const PVA = new Object();
PVA.Batterie = new Object();
PVA.Batterie.Status = "irgendein Wert von irgendwo her";
PVA.Batterie.LadungEntladung = "irgendein anderer Wert von irgendwo her";

In JavaScript gibt es verschiedene Schreibweisen, wie man ein Objekt definieren kann.

Das wurde mir von Rolf im vorangehenden Thread ebenso erläutert, was nun von dir auch bestätigt wird.

Im Vorliegenden Fall braucht es das PVA-Objekt nur einmal. Da lohnt es sich nicht, eine Art Blaupause dafür zu machen, um von dieser Art Objekt mehrere Instanzen zu erzeugen. Oder hast Du vor, damit einmal mehrere Anlagen auf einer Seite zu steuern?

Hier habe ich wieder einen kleine Knoten in meiner Verstandsleitung 😉 Was genau meinst du mit "eine Art Blaupause"? Wie kann ich davon Instanzen machen/haben? Ich definiere das Objekt doch nur einmal, oder?

const PVA = {
  // In den geschweiftern Klammern steht das Objekt als Literal notiert.
  Batterie: {
    // das Batterie-Objekt seinerseits als Literal
    Status: null,
    LadungEntladung: null
  },
  // nun eine Methode, also eine Funktion, die dem Objekt PVA „gehört“:
  BatterieEinlesen: function () {
    this.Batterie.Status = getState('sun2000.0.collected.SOC').val;
    this.Batterie.LadungEntladung = getState('sun2000.0.collected.chargeDischargePower').val;
  }
};

console.log(PVA); // die Batterie hat leere Werte (jeweils null)
PVA.BatterieEinlesen();
console.log(PVA); // die Batterie sollte nun die ermittelten Werte haben

Dieses Beispiel gefällt mir sehr gut! Hier sehe ich potential, wie ich das Objekt dynamisch so gestalten kann, dass ich damit immer die aktuellen Daten bei Bedarf abrufen könnte. Würde ich das Objekt nur einmal initialisieren ohne diese Methode einzubauen, dann wären die Daten nur statisch im Objekt und somit nach einigen Minuten schon nicht mehr aktuell. Sehe ich das so richtig? Ich könnte das Objekt auch so bauen, dass es nur eine Methode gäbe, die aber sämtliche, sich darin befindlichen Objekte und Eigenschaften mit aktuellen Daten abfüllen würde, oder?

Dieser Ansatz finde ich sehr interessant, vielen Dank für diesen Denkanstoss!

LG Roli