Objektorientierung in JavaScript/Objekte und Klassen/Klassen

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Javascript</language>
<html>
<head>
<style>
p.dotted {border-style: dotted; padding: 10px;}
</style>
</head>
</html>

Die Definition einzelner Objekte hat einen großen Nachteil: Es ist aufwendig, mehrere Objekte der gleichen Art zu erstellen. So muss bei vielen Objekten von Personen beispielsweise der gleiche Code für eine Funktion wie atmen() immer wieder verwendet werden. Vor allem bei Änderungen an dieser Funktion kann es zu Problemen kommen.

Klassen fassen Objekte mit ähnlichen Eigenschaften und gleichen Funktionen zusammen. Sie dienen als Bauplan für all ihre ''Instanzen'' und beschreiben, welche Attribute ein Objekt ihres Typs haben kann (ohne selbst Werte festzulegen) oder welche Funktionen diese aufweisen.

<p class=dotted>Eine Instanz ist ein Objekt, welches vom Typ einer Klasse ist. Sie stellt die konkrete Ausprägung der "Schablone" dar.</p>

JavaScript ist eine '''klassenlose''' Programmiersprache. Trotzdem kann man mithilfe einer Funktion viele Objekte des gleichen Typs erzeugen.

<code id="7hbejk541sj1">
function Person(vorname, nachname, geburtsdatum) {
    this.vorname = vorname,
    this.nachname = nachname,
    this.geburtsdatum = geburtsdatum,
    this.id = function() {
        return this.vorname.substring(0, 1) + this.nachname.substring(0, 1) + this.geburtsdatum.getFullYear();
    },
    this.alter = function() {
        return Math.round((new Date().getTime() - this.geburtsdatum.getTime()) / 31536000000);
    }
}
</code>
Das Schlüsselwort ''this'' dient als Platzhalter für das Objekt, welches instanziiert (=erzeugt) werden soll. Für die Instanziierung verwendet man das Schlüsselwort ''new'', durch welches der Konstruktor aufgerufen wird.
<run id="7hbejk541sj2">
var alice = new Person("Alice", "Schulze", new Date("1997-12-01"));
var bob = new Person("Bob", "Müller", new Date("1998-03-12"));
var carol = new Person("Carol", "Schneider", new Date("1997-07-22"));
var dave = new Person("Dave", "Meier", new Date("1998-01-17"));

var personen = [alice, bob, carol, dave];
var result = "";
personen.forEach(function(person) {
  result += person.alter() +"\n";
});
result;
</run>

<p class=dotted>Ein Konstruktor ist eine spezielle Funktion, die zur Erstellung von Instanzen einer Klasse (Instanziierung) verwendet wird. Sie wird durch das Schlüsselwort ''new'' aufgerufen.</p>