Vererbung / prototype / constructor

In einer protoypenbasierten Sprache kann man nicht wirklich von Vererbung sprechen, aber im Endeffekt läuft die hier vorgestellte Vorgehensweise auf das gleiche hinaus.

Vererbung heißt, dass eine Subklasse von einer übergeordneten Klasse Eigenschaften und Methoden erbt. In der erbenden Klasse kann man weitere Methoden und Eigenschaften definieren.

Etwas wie Vererbung kann man erzeugen, indem die erbende Klasse mittels prototype erweitert wird und zwar mit dem Objekt einer anderen Klasse.

Im folgenden Beispiel erbt die Klasse Mitarbeiter alle Eigenschaften von der Klasse Person von der eine Instanz mittels new erzeugt wird.

Mitarbeiter.prototype = new Person();

Hier mal ein komplettes Beispiel.

function Person(){
this.tierart = "Mensch";
}

function Mitarbeiter(){
this.beruf = "Waldarbeiter";
}

Mitarbeiter.prototype = new Person();

var willi = new Mitarbeiter();

console.log(willi.tierart);//Mensch
 

willi hat die Eigenschaften tierart und beruf.

Es gibt aber noch ein Problem und zwar wenn es in der Konstruktorfunktion Parameter gibt, welche Werte für die Eigenschaften erwarten und die erbende "Klasse" auch die Möglichkeit bieten soll, die gleichen Parameter zu besitzen. Das folgende Beispiel funktioniert nicht.

function Person(name){
this.name = name;
this.tierart = "Mensch"; 
} 

function Mitglied(){
} 
Mitglied.prototype = new Person();

In diesem Fall, hätte Mitglied zwar die Eigenschaften name und tierart, aber die Eigenschaft name wäre undefined.

Um das Problem zu lösen gibt es die 3 Möglichkeiten

  1. call()
  2. apply()
  3. constructor()

constructor()

Mittels constructor() werden Parameter von Konstruktorfunktionen übergeben.


function Person(name, vorname){
	this.name = name;
	this.vorname = vorname;
	this.wohnort = "Erde";
}

function Mitarbeiter(name, vorname, beruf){
	this.constructor(name, vorname);
	this.beruf = beruf;
}

Mitarbeiter.prototype = new Person();
var m1 = new Mitarbeiter("Sauber", "Sabine", "Putzfrau");
document.write(m1.name);

document.write(m1.vorname);

document.write(m1.beruf);

document.write(m1.wohnort);	

siehe Beispiel

 

 


 

Javascript Tipps