Frage zur Klassen erweiterung prototype

hoctar

Erfahrenes Mitglied
Hallo :)
wofür wird der Prototype einer Klasse verwendet?

Was ist der Unterschied zwischen:

Javascript:
Klasse.prototype = {
    methode: function() {

    }
}
und
Javascript:
Klasse = {
    methode: function() {

    }
}
 
Zuletzt bearbeitet von einem Moderator:
Hi,

Jede Klasse besitzt ein prototype-Objekt. Diesem können Eigenschaften und Methoden zugewiesen, die für alle Instanzen gelten.
So kann zum Beispiel für eine Klasse Kreis einmal die Methode berechneUmfang definiert und dem prototype-Objekt zugewiesen werden. Nach der Initialisierung hat jede Instanz/jedes Objekt Zugriff darauf.

Vorteil:
Es kann eine Art Schablone im Speicher abgelegt werden, auf die jede Instanz/jedes Objekt der Klasse zugreifen kann. Im anderen Fall würde die Methode für jede Instanz/jedes Objekt neu angelegt werden und würde auch entsprechend mehr Speicherbedarf und internen Verwaltungsaufwand bedeuten.
Ein weiterer Vorteil ist, dass ein Objekt Eigenschaften erben kann, nachdem es erzeugt wurde, indem sie seinem Prototyp zugefügt werden.

So kann eine Art Vererbung in JavaScript realisiert werden:
Code:
// Basisobjekt
function myClass(){
  this.attr = "Wert a";
}
myClass.prototype.getAttr = function(){
  alert(this.attr);
}

// Unterklasse
function mySubClass(){
  this.attr = this.attr + " - Wert b";
}
// Vererbung
mySubClass.prototype = new myClass();

// Ausgabe: Wert a
(new myClass()).getAttr();
// Ausgabe: Wert a - Wert b
(new mySubClass()).getAttr();
Im Beispiel wird dem Prototyp der Unterklasse (mySubClass) eine Instanz der Basisklasse zugewiesen. Anschliessend besitzen Instanzen/Objekte der Unterklassen ebenfalls die Methode getAttr.

Ich hoffe, das hilft dir weiter.


Ciao
Quaese
 
Vielen Dank für die ausführliche Antwort :)

Noch ein kleiner Hinweis für andere:
Für die Prototypisierung kann man Object.create verwenden.

Somit könnte man aus folgender Klasse eine prototypische erstellen

Javascript:
Klasse = {
    methode: function() {
 
    }
}

var meineKlasse = Object.create(Klasse);
 
Zuletzt bearbeitet von einem Moderator:
Zurück