JavaScript/Objekte/Function/call
Die Function.prototpye.call()-Methode ruft eine Funktion mit dem Argument this
und individuellen Argumenten auf.
Sie unterscheidet sich von Function.prototype.apply() dadurch, dass sie eine Liste von Argumenten und apply()
einen einzelnen Array von Argumenten akzeptiert.
meineFunktion.call(thisArgument[, Argument1[, Argument2[, ...]]])
Folgende Angaben sind möglich:
thisArgument
: Wert, der alsthis
-Parameter übergeben werden soll.Argument1, Argument2, ...
: derbound
-Funktion vorangestellte Argumente
Anwendungsbeispiel
Eine Funktion mit einem beliebigen Wert für this
aufrufen zu können bietet die interessante Möglichkeit, Methoden von einem Objekt für ein anderes Objekt zweckzuentfremden. Das klappt natürlich längst nicht immer, aber einige der auf Array.prototype definierten Methoden sind bewusst so einfach gehalten, dass sie für alle Objekte funktionieren, die sich wie ein einfaches Array verhalten. Das Objekt muss dafür eine length-Eigenschaft besitzen, und die darin gesammelten Werte müssen mit Indexzahlen von 0 bis length-1 ansprechbar sein.
Diese grundlegenden Eigenschaften werden beispielsweise von einer NodeList unterstützt. Wenn wir also eine Funktion schreiben wollen, die von allen Elemente in einer NodeList die id-Attribute einsammelt, könnten wir das so tun:
function SammleIDs(nodelist) {
if (!(nodelist instanceof NodeList))
throw new TypeError('SammleIDs erwartet eine NodeList');
return Array.prototype.map.call(nodelist, element => element.id);
}
Die Funktion SammleIDs stellt zunächst sicher, dass auch wirklich ein NodeList-Objekt übergeben wurde. Wenn nicht, wirft sie einen TypeError, um den Programmierer zur Fehlerkorrektur zu zwingen.
Erhält sie eine NodeList, wird die map-Methode, die als Funktion im Array.prototype
Objekt zu finden ist, mit der NodeList als this
-Wert sowie einer kleinen Pfeilfunktion als Callback aufgerufen. Die map
-Methode ist ausdrücklich so spezifiziert[1], dass sie mit einem Array-artigen Objekt in this
umgehen kann.
Der Rückgabewert von map ist ein Array mit den Ergebnissen des Callback-Aufrufs, also die IDs aller Elemente in der NodeList.
Siehe auch
Weblinks
- ↑ ECMAScript-Spezifikation: Definition der map-Methode von Array.prototype
Array.prototype.map
sieht man oft auch die kürzere Schreibweise[].map
. Das funktioniert, weil[]
ein Literal für ein leeres Array ist, das diemap
-Methode vonArray.prototype
erbt. Man erzeugt damit für JavaScript aber den Mehraufwand, ein leeres Array zu erstellen und gleich wieder wegzuwerfen.