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:
var hs = {
name: "FH Salzburg",
typ: "Fachhochschule",
seit: 1996,
alter: function() { return (new Date).getYear() + 1900 - this.seit }
};
console.log( hs.alter() ); // 20Klassen
In Javascript 2015 wurden Klassen in JavaScript eingeführt:
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 aufVererbung mit Klassen
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 // sleepingContructor 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:
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():
// folgende Ausdrücke sind true:
mmtb.constructor === Studiengang;
hs.constructor === Object;
Dieser Konstruktor wird auch verwendet, um die Frage instanceof zu beantworten:
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.