Objekte + Klassen
als Präsentation ▻Javascript ist eine objektorientierte Sprache. Achtung, hier kommt es leicht zu einem Missverständniss: Objektorientierung hat nicht zwingend etwas mit Klassen zu tun, sondern eben mit Objekten. Und während z.B. in Java, C++, C#, PHP diese Objekte immer in Klassen organisiert sind, ist das in Javascript nicht zwingend der Fall.
▻Ein einzelnes Objekt
Wie Sie ein einzelnes Objekt mittels JSON erzeugen wissen Sie ja schon:
Javascript Code Objekt in JSON Schreibweise
var hs = {
name: "FH Salzburg",
typ: "Fachhochschule",
seit: 1996,
alter: function() { return (new Date).getYear() + 1900 - this.seit }
};
console.log( hs.alter() ); // 20
Klassen
In Javascript 2015 wurden Klassen in JavaScript eingeführt:
Javascript Code Klasse mit Constructor und einer Methode
class Studiengang {
constructor (name, seit, hs) {
this.name = name;
this.seit = seit;
this.hs = hs;
}
toString () {
return "Studiengang " + this.name +
" (seit " + this.seit +
" @ " + this.hs.name + ")";
}
}
typeof Studiengang; // function!
mmtb = new Studiengang( "BSc MultiMediaTechnology", 2008, hs );
mmtm = new Studiengang( "MSc MultiMediaTechnology", 2011, hs );
mmtb.toString(); // ruft toString Methode auf
Vererbung mit Klassen
Javascript Code Vererbung von Attributen
class Pet {
constructor() {
this.status = "sleeping";
}
log() {
console.log("i am " + this.status +
". " + this.word + "!");
}
}
class Dog extends Pet {
constructor (b) {
super();
this.breed = b;
this.word = "wau";
}
sit() {
this.status = "sitting";
}
}
d = new Dog("beagle");
d.word // wau
d.sit()
d.status // sleeping
Contructor ohne Klasse
Vor den Klassen gab es in JavaScript eine andere Art mehrere gleichartige Objekte zu erzeugen: die Constructor Funktion wurde als normale Funktion angelegt:
Javascript Code Konstruktor für Objekte
function Studiengang(name, seit, hochschule) {
this.name = name;
this.seit = seit;
this.hs = hochschule;
}
mmad = new Studiengang( "DI(FH) MultiMediaArt", 1996, hs);
mmab = new Studiengang( "BA MultiMediaArt", 2006, hs);
mmtb = new Studiengang( "BSc MultiMediaTechnology", 2008, hs);
mmtm = new Studiengang( "MSc MultiMediaTechnology", 2011, hs);
Jedes dieser Objekte hat nun eine Eigenschaft name
und eine Eigenschaft seit
.
Die so erzeugten Objekte bleiben mit der Konstruktor-Funktion
verbunden - falls keine verwendet wurde auf die Funktion Object()
:
Javascript Code Fortsetzung: Konstruktor-Funktionen
// folgende Ausdrücke sind true:
mmtb.constructor === Studiengang;
hs.constructor === Object;
Dieser Konstruktor wird auch verwendet, um die Frage instanceof
zu beantworten:
Javascript Code Fortsetzung: Operator instanceof
mmtb instanceof Studiengang;
hs instanceof Object;
mmtb instanceof Object;
mmtb
ist auch eine Instanz von Object
! Es muss also eine Art Vererbungs-Hierarchie
geben, die wir noch nicht kennen, in der Studiengang
als Kind von Object
geführt wird.
Wie funktioniert das? Die Antwort lautet: mit dem Prototypen.