Vererbung call()

mehr über call()

Die call() Methode erwartet einen Kontext als Argument und eine Liste an Argumenten, die der Funktion übergeben werden, genau wie bei bind() . Anders als bei bind(), erzeugt call keine neue Funktion sondern ruft diese direkt auf.

call( this, param1, param2)

Verkettung von Konstruktoren

Mittels call() kann man eine Verkettung von Konstruktoren erreichen. Im Beispiel initialisiert Lastwagen  die Eigenschaften this.marke, this.hupe, this.tueren und die Parameter von Auto() werden weitergereicht an die Parameter von Lastwagen();

function Auto(marke, hupe)
{
this.marke = marke;
this.hupe = hupe;
this.tueren = 4; 

}
function Lastwagen(LKW_marke, LKW_hupe)
	{
	Auto.call(this, LKW_marke, LKW_hupe);
}

var hanomag = new Lastwagen("Hanomag", "tröt");
document.write("hanomag Marke ist: "+ hanomag.marke+" die Hupe macht: "+hanomag.hupe+" Anzahl der Türen ist: "+hanomag.tueren);

Die Lastwagen Klasse wird erzeugt und der Konstruktor der Klasse Auto wird aufgerufen. Damit werden die Parameter der Konstruktoren verkettet. Der erste Parameter this ist das anonyme globale Objekt. Die Parameter werden weitergereicht.

In der Regel benennt man die Parameter der beiden Konstruktorfunktionen gleich, aber ich habe sie hier bewusst anders genannt, um die Sachlage zu verdeutlichen, dass der erste Parameter marke von Auto() weitergreicht wird an den ersten Parameter LKW_marke von Lastwagen u.s.w.

Kontext

Weiterführendes Thema zur this Problematik.

Siehe dazu auch diesen Beitrag

Hier wird das nächste Beispiel erläutert:

Im Globalen Space wird eine Variable name initialisiert.
Im Objekt context wird ein Attribut name erzeugt.

Es wird eine Funktion greeting erstellt, diese liefert die beiden Parameter der Funktion und this.name

Ruft man greeting() im globalen Space auf, bezieht sich this.name auf die Variable name des globalen Space.
Ruft man greeting() auf mit der Funktion call() und übergibt call das Objekt context und weitere Parameter, so bezieht sich this.name auf das Kontextobjekt und die Parameter werden weitergreicht an die Funktion greeting().

 

var name = "Gottfried Global";

var context = {
 
    name: "Conni Context"
     
};
 
function greeting(param1, param2)
{
     
    return param1 + this.name + param2;
     
}

greeting("Guten Tag ", " auf wiedersehen.");//Guten Tag Gottfried Global auf wiedersehen.

 
greeting.call(context, "Hallo ", " alles klar?"); // Hallo Conni Context alles klar?

Beispiel call

Script call


 

 

Siehe auch die Kommentare im Script.

Hier noch ein weiteres Beispiel


 

Javascript Tipps