JavaScript ist eine Prototyp-basierte Sprache (klassenlose Objektorientierung):
=> Verhalten wie bei Klassen-basierter Sprache, solange keine Objekte (vor allem auch keine als Prototyp verwendeten Objekte) zu Laufzeit verändert werden.
Unterschiede | Klassen-basiert (Java) | Prototyp-basiert (JavaScript) |
---|---|---|
Datentyp | wird durch Klasse beschrieben -> jedes Objekt gleich aufgebaut | wird durch Referenz auf ein Prototyp Objekt festgelegt -> referenzierter Prototyp gleich, aber Objekt erweiterbar |
Objekt erweitern | nicht möglich (in einigen Sprachen Klasse erweiterbar) | Objekt Eigenschaften und Funktionen können zur Laufzeit hinzugefügt oder gelöscht werden (prinzipiell auch bei Objekten, die als Prototyp verwendet werden) |
Objekt anlegen | nur mit new (bei Array und String auch mit Literalen) | mit new oder Objektliteralen (direkt beschreiben) |
Vererbung | wird über die Klassenstruktur beschrieben | wird durch Prototypenkette realisiert (Prototyp der selbst wieder auf Prototyp verweist) |
Vererbung wird erreicht, indem eine Kette von als Prototypen verwendeten Objekten gebildet wird.
JavaScriptclass Test {
constructor() {
this.a = 1;
}
func_a() {}
}
class Test2 extends Test {
constructor() {
super();
this.b = 2;
}
func_b() {}
}
let t = new Test2();
console.log(t); // check console for output
let t2 = new Test2();
t2.c = 3;
console.log(t2);
console.log(`${t instanceof Test2}, ${t2 instanceof Test2}`);