Objekte in JavaScript - Zusammenfasssung von Eigenschaften (=Variablen) und Methoden (=Funktionen).

Ein Spediteur möchte seine Fahrzeuge mit einem Programm verwalten. Jeder LKW besitzt vergleichbare Eigenschaften: KFZ-NR, maximale Ladekapazität, gegenwärtige Lademenge, Art der Ladung. Innerhalb des Programms wird jedes Fahrzeug durch ein LKW-Objekte dargestellt.


Um ein Objekt vom Typ LKW zu definieren, müßte dann zu Beginn folgende Funktion festgelegt werden:

function LKW (kfznr, ladekapazitaet, aktuelleLademenge, ladungsart)
{
this.kfznr = kfznr;
this.ladekapazitaet = ladekapazitaet;
this.aktuelleLademenge = aktuelleLademenge;
this.ladungsart = ladungsart;
}

Damit ist aber noch nicht viel "gewonnen". Es "können" jetzt durch das Skript ein oder mehrere LKW-Objekte erzeugt werden. Jedes Objekt hat dann die gleichen vier Eigenschaften kfznr, ladekapazitaet, aktuelleLademenge, ladungsart.
Wirklich erzeugt wird ein Objekt durch das Schlüsselwort new und mit den angegeben Werten belegt:

var ersterLKW = new LKW("UN-EN 111",20,10,"Paletten");

document.write("Name des Fahrzeugs: ", + ersterLKW.kfznr);
document.write("Maximale Ladung: ", + ersterLKW.ladekapazitaet);
document.write("Aktuelle Lademenge: ", + ersterLKW.aktuelleLademenge);
document.write("Ladungsart: ", + ersterLKW.ladungsart);

Das in der Funktion benutzte Schlüsselwort this bezieht sich auf das aktuelle Objekt, also hier auf ersterLKW.

Den Eigenschaften von Objekten dürfen übrigens nicht nur einfache Datentypen zugrunde liegen. Es kann auch ein Array oder ein weiteres Objekt als Eigenschaft genutzt werden.

Beispiel:
function person (name, alter)
{
this.name = name;
this.alter = alter
}

function LKW (kfznr, fahrer, ladekapazitaet, aktuelleLademenge, ladungsart)
{
this.kfznr = kfznr;
this.fahrer = fahrer;
this.ladekapazitaet = ladekapazitaet;
this.aktuelleLademenge = aktuelleLademenge;
this.ladungsart = ladungsart;
}

Benutzung:
var lkwfahrer = new person ("meier", 25);
var LKW1 = new LKW("UN-EN 111",lkwfahrer,30,29,"Schüttgut");

document.write("Name des Fahrzeugs: ", + LKW1.kfznr);
document.write("Name des Fahrers: ", + LKW1.fahrer.name);
document.write("Alter des Fahrers: ", + LKW1.fahrer.alter);
document.write("Maximale Ladung: ", + LKW1.ladekapazitaet);
document.write("Aktuelle Lademenge: ", + LKW1.aktuelleLademenge);
document.write("Ladungsart: ", + LKW1.ladungsart);

Die Eigenschaft Fahrer hat hier den Datentyp person. Deutlich sieht man hier die Punktschreibweise:
Objektname . Eigenschaft (ohne Leerstelle!) - möchte man auf das Kennzeichen zugreifen, schreibt man also LKW1.kfznr
Der Fahrer ist ebenfalls ein Objekt, d.h. man benötigt beim Zugriff auf das Alter eine weitere Unterteilung: LKW1.fahrer.alter


Die bisherigen Objekte hatten zwar Eigenschaften, aber noch keine Methoden. Diese müssen vor der Objektdefinition erklärt werden. Für das LKW-Objekt werden nun zwei Methoden festgelegt: beladen und entladen.

// Methode entladen
function entladen(menge)
{
if (menge <= this.aktuelleLademenge)
  this.aktuelleLademenge = this.aktuelleLademenge - menge
else
  this.aktuelleLademenge = 0;
}

// Methode beladen
function beladen(menge, ladungsart)
{
if (this.aktuelleLademenge == 0)
{
  this.ladungsart = ladungsart;
  if (menge > this.ladekapazitaet)
    this.aktuelleLademenge = this.ladekapazitaet
  else
    this.aktuelleLademenge = menge;
}
else
  alert("Vor dem Beladen bitte erst " + this.aktuelleLademenge + "Tonnen " + this.ladungsart + " entladen");
}

Diese Methoden müssen dann dem Objekt LKW bekanntgemacht werden:

function LKW (kfznr, fahrer, ladekapazitaet, aktuelleLademenge, ladungsart)
{
// Eigenschaften
this.kfznr = kfznr;
this.fahrer = fahrer;
this.ladekapazitaet = ladekapazitaet;
this.aktuelleLademenge = aktuelleLademenge;
this.ladungsart = ladungsart;

// Methoden
this.entladen = entladen;
this.beladen = beladen;
}

Danach kann man schreiben:
var lkwfahrer = new person ("meier", 25);
var LKW1 = new LKW("UN-EN 111",lkwfahrer,30,29,"Schüttgut");

LKW1.entladen(29);
LKW1.beladen(30,"Sand");

Hinweis:
Die Parameterbezeichnungen (z. B. ladungsart) müssen nicht mit den Eigenschaftsnamen (this.ladungsart) übereinstimmen. Es vereinfacht die Lesbarkeit des Skripts aber sehr...


Zurück
Autor: Hubert Köppelmann

Stand: 13.02.2000