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)
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.
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
Siehe auch die Kommentare im Script.
Hier noch ein weiteres Beispiel