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. <br/>
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>

<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>

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>