JavaScript/Objekte/Function/apply

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche

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)


Attribute
Writable true
Enumerable false
Configurable true


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.

Beispiel
// 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 als this-Parameter übergeben werden soll.
    Beachten Sie: Wenn die Methode eine Funktion im non-strict mode ist werden die Werte null and undefined 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:

Beispiel
// 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]

Siehe auch

Spezifikation