JavaScript/Objekte/Function/apply
Die Methode apply ruft eine Funktion mit einem gegebenen this
-Wert und einer beliebigen Anzahl Argumenten auf. Die Argumente für den Funktionsaufruf werden in einem Array oder Array-ähnlichen Objekt an die Methode übergeben.
Syntax
Function.prototype.apply(thisArg, argArray)
Writable | true |
Enumerable | false |
Configurable | true |
Inhaltsverzeichnis
Beschreibung
Ebenso wie die Funktionsmethode call
erlaubt es die Methode apply
eine Funktion in einem beliebigen Kontext aufzurufen, also den Wert zu bestimmen, mit dem die Funktionsvariable this
beim Aufruf initialisiert wird. Anders als der Methode call
, der Argumente für die formalen Parameter der Funktion einzeln übergeben werden müssen, erwartet apply
die Argumente für den Funktionsaufruf in einem Array oder einem Array-ähnlichen Objekt, wie zum Beispiel einer NodeList.
// Create an ordinary array
const primes = [2, 3, 5, 7];
// Reference the apply method via prototype chain of `push`
primes.push.apply(primes, [11, 13, 17]);
// Show concatenated list
console.log(primes); // [2, 3, 5, 7, 11, 13, 17]
In dem Beispiel oben wird zunächst in Literalschreibweise ein Array erzeugt und in einer Konstante gespeichert. Auf dem Array wird mittels apply
die Methode push
aufgerufen, die eine beliebige Anzahl Argumente nimmt und dem Array hinzufügt, in dessen Kontext sie aufgerufen wurde. – Hier also dem in der Konstante primes
hinterlegten Array.
Folgende Angaben sind möglich:
thisArgument
: Wert, der alsthis
-Parameter übergeben werden soll.Beachten Sie: Wenn die Methode eine Funktion imnon-strict mode
ist werden die Wertenull
andundefined
mit dem globalen Objekt ersetzt.ArgumentArray
: ein array-ähnliches Objekt, dass die Argumente mit denen die Funktion aufgerufen wird spezifiziert, oder null oder undefined wenn keine Argumente übergeben werden sollen.
Alternative mit Spread-Operator
Die Verwendung des Spread-Operators ...
kann eine Alternative bei Funktionsaufrufen sein:
// Ein einfaches Array:
const primes = [2, 3, 5, 7];
// Array.prototype.push([…]) würde das Array-Argument als _ein_ Array-Element pushen
// statt den Inhalt zu pushen.
// Der Spread-Operator „spreizt“ das Array-Argument auf in einzelne Argumente:
primes.push(...[11, 13, 17]);
// Resultat:
console.log(primes); // [2, 3, 5, 7, 11, 13, 17]