JavaScript/Tutorials/OOP/Eigenschaften und Methoden

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

Die Idee hinter Objekten ist, dass man Funktionalität und den dafür notwendigen Programmcode kapselt, damit eine inhaltliche Trennung zu anderer Funktionalität möglich ist. Damit sind Objekte auch so etwas wie Unterprogramme, die ihre eigene Datenhaltung haben können. Fangen wir mit letzterem an und schauen, wie man Objekte als Datenbehälter einsetzen kann.

Komplexe Datentypen[Bearbeiten]

Objekte haben Eigenschaften. Damit gehören sie zu den komplexen Datentypen. Nehmen wir einmal eine Geo-Koordinate als Beispiel. Diese beschreibt einen Punkt auf der Erde und besteht deswegen aus einer Art x-Koordinate (Latitude) und einer y-Koordinate (Longitude). Eine Geo-Koordinate ist also keine gewöhnliche Zahl (wie z.B. eine Fließkommazahl oder float), sondern ein Zahlenpaar.

Um das in JavaScript nachzubilden, könnte man das so umsetzen:

Geo-Koordinate mit JavaScript
const geo = new Object();

geo.latitude = 1.234;
geo.longitude = 2.345;
Wir verwenden einen Variablennamen geo für unser Objekt, in das wir ein neues leeres Objekt hinein speichern. Das Schlüsselwort new sorgt dafür, dass der Funktionsaufruf Object() ein neues Objekt erzeugt - dazu später mehr.
Für das so neu erzeugte Objekt werden nun zwei Eigenschaften vergeben, einmal die Eigenschaft latitude und einmal longitude. Die Schreibweise mit dem Punkt (Punkt-Operator genannt, hier kein Dezimaltrennzeichen!) trennt Variablenname und Eigenschaftsname.
Beachten Sie: In JavaScript kann man Objekten jederzeit neue Eigenschaften hinzufügen, oder vorhandene Eigenschaften verändern, indem man mit dem Punkt-Operator den gewünschten Eigenschaftsnamen notiert und mit dem Istgleichzeichen den gewünschten Wert zuweist.

Methoden[Bearbeiten]

Objekte können nicht nur irgendwelche Daten als Eigenschaften haben, sondern auch Funktionalitäten speichern. Diese Funktionalitäten werden im Grunde wie reguläre Funktionen definiert, sind aber im Kontext des Objektes angelegt, was zusätzliche Möglichkeiten bringt und weshalb man dann von Methoden spricht.

Hinweis

Methoden sind auch nur Eigenschaften eines Objektes, aber ihr Wert ist eben ein Funktionsobjekt.

Vergleichen wir einmal eine schlichte Funktion mit einer Methode.

Unterschied zwischen Funktion und Methode
function f (x) { return 2*x + 7; }

const o = new Object();

o.name = "Frizzy";
o.alter = f(4);
o.vorstellen = function () {
  return "Ich heiße " + this.name + " und bin " + this.alter + " Jahre alt.";
};

o.vorstellen(); // Ich heiße Frizzy und bin 15 Jahre alt.
Zuerst wird eine Funktion f definiert, die 2x+7 berechnet. Sie steht nicht im Kontext eines Objekts (doch, im Kontext von window und kann mit window.f() aufgerufen werden), daher spricht man bei ihr von einer Funktion.

Das Objekt in der Variable o besitzt zwei Eigenschaften: name und alter. Der Wert in name wird direkt als Zeichenkette notiert (ein sogenanntes Stringliteral), der Wert für alter wird mithilfe der Funktion f berechnet.

Die Methode vorstellen ist ebenfalls eine Funktion, die aber im Kontext des Objekts o definiert ist und sozusagen dem Objekt gehört. Hier sieht man auch, welchen Sinn Methoden haben, da vorstellen auf andere Eigenschaften von o beim Erzeugen des Ergebniswertes zugreifen kann. Das Schlüsselwort this zeigt auf das Objekt, in dessen Kontext die Funktion aufgerufen wurde. Wenn also der Funktionsaufruf in der letzten Zeile mit o.vorstellen() erfolgt, zeigt this auf das Objekt in o und kann so mit dem Punktoperator und dem Eigenschaftsnamen die Werte der Eigenschaften von o verwenden.
Beachten Sie: In der Einführung haben wir schon gelernt, dass man Funktionen als Argumente verwenden kann, indem man sie z.B. als Parameter eines Funktionsaufrufes verwendet. Hier haben wir gesehen, dass man ein Funktionsliteral auch in einer Wertzuweisung verwenden kann, wenn man eine Objektmethode definieren möchte.