JavaScript Prototypen

JavaScript ist eine Prototyp-basierte Sprache (klassenlose Objektorientierung):

  • Objekt kann (beliebiges) anderes Objekt als Prototyp referenzieren und dadurch dessen Eigenschaften und Funktionen übernehmen (ggf. durch eigene überdecken)
  • Es gibt nur Objekte und keine Klassen als Vorlagen für Objekte (Prototyp Objekt Ersatz für Klasse, wenn mehrere dieses referenzieren)
  • JavaScript Klassen wurden mit ECMAScript 2015 eingeführt und verbergen die Prototyp Struktur
  • mehr Informationen

=> Verhalten wie bei Klassen-basierter Sprache, solange keine Objekte (vor allem auch keine als Prototyp verwendeten Objekte) zu Laufzeit verändert werden.

UnterschiedeKlassen-basiert (Java)Prototyp-basiert (JavaScript)
Datentypwird durch Klasse beschrieben
-> jedes Objekt gleich aufgebaut
wird durch Referenz auf ein Prototyp Objekt festgelegt
-> referenzierter Prototyp gleich, aber Objekt erweiterbar
Objekt erweiternnicht 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 anlegennur mit new (bei Array und String auch mit Literalen)mit new oder Objektliteralen (direkt beschreiben)
Vererbungwird über die Klassenstruktur beschriebenwird durch Prototypenkette realisiert (Prototyp der selbst wieder auf Prototyp verweist)

Vererbung durch Prototypenkette

Vererbung wird erreicht, indem eine Kette von als Prototypen verwendeten Objekten gebildet wird.

Prototypenkette Beispiel

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}`);

mehr Informationen