Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Eingebaute Standardobjekte
  5. Function
  6. apply()

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

Function.prototype.apply()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨Juli 2015⁩.

Dieapply() Methode vonFunction Instanzen ruft diese Funktion mit einem gegebenenthis-Wert undarguments, die als Array (oder einarray-ähnliches Objekt) bereitgestellt werden, auf.

Probieren Sie es aus

const numbers = [5, 6, 2, 3, 7];const max = Math.max.apply(null, numbers);console.log(max);// Expected output: 7const min = Math.min.apply(null, numbers);console.log(min);// Expected output: 2

Syntax

js
apply(thisArg)apply(thisArg, argsArray)

Parameter

thisArg

Der Wert vonthis, der für den Aufruf vonfunc bereitgestellt wird. Wenn die Funktion nicht imstrict mode ist, werdennull undundefined durch das globale Objekt ersetzt, und primitive Werte werden in Objekte umgewandelt.

argsArrayOptional

Ein array-ähnliches Objekt, das die Argumente angibt, mit denenfunc aufgerufen werden soll, odernull oderundefined, wenn keine Argumente an die Funktion übergeben werden sollen.

Rückgabewert

Das Ergebnis des Aufrufs der Funktion mit dem angegebenenthis-Wert und den Argumenten.

Beschreibung

Hinweis:Diese Funktion ist fast identisch mitcall(), außer dass die Funktionsargumente beicall() einzeln als Liste übergeben werden, während sie beiapply() in einem Objekt, typischerweise einem Array, kombiniert sind — zum Beispielfunc.call(this, "eat", "bananas") vs.func.apply(this, ["eat", "bananas"]).

Normalerweise, wenn eine Funktion aufgerufen wird, ist der Wert vonthis innerhalb der Funktion das Objekt, auf dem die Funktion aufgerufen wurde. Mitapply() können Sie einen beliebigen Wert alsthis beim Aufrufen einer bestehenden Funktion festlegen, ohne zuerst die Funktion als Eigenschaft an das Objekt anhängen zu müssen. Dies ermöglicht es Ihnen, Methoden eines Objekts als generische Utility-Funktionen zu verwenden.

Sie können auch jede Art von Objekt, das array-ähnlich ist, als zweiten Parameter verwenden. In der Praxis bedeutet das, dass es einelength Eigenschaft und ganze Zahl-Eigenschaften ("Index") im Bereich(0..length - 1) haben muss. Zum Beispiel könnten Sie einNodeList oder ein benutzerdefiniertes Objekt wie{ 'length': 2, '0': 'eat', '1': 'bananas' } verwenden. Sie können aucharguments verwenden, zum Beispiel:

js
function wrapper() {  return anotherFn.apply(null, arguments);}

Mit denRest-Parametern und dem ParameterSpread-Syntax kann dies umgeschrieben werden als:

js
function wrapper(...args) {  return anotherFn(...args);}

Im Allgemeinen istfn.apply(null, args) äquivalent zufn(...args) mit der Parameter-Spread-Syntax, außer dassargs im ersten Fall mitapply() ein array-ähnliches Objekt und im zweiten Fall mit Spread-Syntax einiterierbares Objekt sein muss.

Warnung:Verwenden Sieapply() nicht, um Konstruktoren zu verketten (zum Beispiel, um Vererbung zu implementieren). Dies ruft die Konstruktorfunktion als normale Funktion auf, was bedeutet, dassnew.targetundefined ist, und Klassen einen Fehler werfen, da sie nicht ohnenew aufgerufen werden können. Verwenden Sie stattdessenReflect.construct() oderextends.

Beispiele

apply() verwenden, um ein Array an ein anderes anzuhängen

Sie könnenArray.prototype.push() verwenden, um ein Element an ein Array anzuhängen. Dapush() eine variable Anzahl von Argumenten akzeptiert, können Sie auch mehrere Elemente auf einmal anhängen. Aber wenn Sie ein Array anpush() übergeben, wird dieses Array tatsächlich als einzelnes Element hinzugefügt, anstatt die Elemente einzeln hinzuzufügen, was zu einem Array innerhalb eines Arrays führt. Andererseits hatArray.prototype.concat() in diesem Fall das gewünschte Verhalten, aber es fügt nicht zumvorhandenen Array hinzu – es erstellt und gibt ein neues Array zurück.

In diesem Fall können Sieapply verwenden, um ein Array implizit als eine Serie von Argumenten zu "spreaden".

js
const array = ["a", "b"];const elements = [0, 1, 2];array.push.apply(array, elements);console.info(array); // ["a", "b", 0, 1, 2]

Der gleiche Effekt kann mit der Spread-Syntax erreicht werden.

js
const array = ["a", "b"];const elements = [0, 1, 2];array.push(...elements);console.info(array); // ["a", "b", 0, 1, 2]

apply() und eingebaute Funktionen verwenden

Eine clevere Verwendung vonapply() ermöglicht es Ihnen, eingebaute Funktionen für einige Aufgaben zu nutzen, die sonst wahrscheinlich ein manuelles Schleifen über eine Sammlung erfordern würden (oder die Spread-Syntax verwenden).

Zum Beispiel können wirMath.max() undMath.min() verwenden, um den maximalen und minimalen Wert in einem Array zu ermitteln.

js
// min/max number in an arrayconst numbers = [5, 6, 2, 3, 7];// using Math.min/Math.max applylet max = Math.max.apply(null, numbers);// This about equal to Math.max(numbers[0], …)// or Math.max(5, 6, …)let min = Math.min.apply(null, numbers);// vs. loop based algorithmmax = -Infinity;min = Infinity;for (const n of numbers) {  if (n > max) {    max = n;  }  if (n < min) {    min = n;  }}

Aber Vorsicht: Wenn Sieapply() (oder die Spread-Syntax) mit einer beliebig langen Argumentenliste verwenden, laufen Sie Gefahr, das Argumentlängenlimit der JavaScript-Engine zu überschreiten.

Die Konsequenzen eines Funktionsaufrufs mit zu vielen Argumenten (das heißt, mehr als zehntausend Argumenten) sind nicht spezifiziert und variieren je nach Engine. (Die JavaScriptCore-Engine hat ein festgelegtesArgumentlimit von 65536.) Die meisten Engines werfen eine Ausnahme; aber es gibt keine normative Spezifikation, die andere Verhaltensweisen verhindert, wie zum Beispiel das willkürliche Begrenzen der tatsächlich an die angewendete Funktion übergebenen Argumente. Um diesen letztgenannten Fall zu veranschaulichen: Wenn eine solche Engine ein Limit von vier Argumenten hätte (tatsächliche Limits sind natürlich erheblich höher), wäre es, als ob die Argumente5, 6, 2, 3 in den obigen Beispielen anapply übergeben worden wären, anstatt des vollständigen Arrays.

Wenn Ihr Werte-Array auf zehntausende ansteigen könnte, verwenden Sie eine Hybridstrategie: Wenden Sie Ihre Funktion Stück für Stück auf das Array an:

js
function minOfArray(arr) {  let min = Infinity;  const QUANTUM = 32768;  for (let i = 0; i < arr.length; i += QUANTUM) {    const subMin = Math.min.apply(      null,      arr.slice(i, Math.min(i + QUANTUM, arr.length)),    );    min = Math.min(subMin, min);  }  return min;}const min = minOfArray([5, 6, 2, 3, 7]);

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-function.prototype.apply

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp