A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Function/call below:

Function.prototype.call() - JavaScript | MDN

Function.prototype.call()

Baseline Widely available

Die call() Methode von Function Instanzen ruft diese Funktion mit einem angegebenen this-Wert und einzeln bereitgestellten Argumenten auf.

Probieren Sie es aus
function Product(name, price) {
  this.name = name;
  this.price = price;
}

function Food(name, price) {
  Product.call(this, name, price);
  this.category = "food";
}

console.log(new Food("cheese", 5).name);
// Expected output: "cheese"
Syntax
call(thisArg)
call(thisArg, arg1)
call(thisArg, arg1, arg2)
call(thisArg, arg1, arg2, /* …, */ argN)
Parameter
thisArg

Der Wert, der als this beim Aufruf von func verwendet werden soll. Wenn die Funktion nicht im Strict Mode ist, werden null und undefined durch das globale Objekt ersetzt, und primitive Werte werden in Objekte umgewandelt.

arg1, …, argN Optional

Argumente für die Funktion.

Rückgabewert

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

Beschreibung

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

Normalerweise ist der Wert von this innerhalb einer Funktion das Objekt, auf dem die Funktion aufgerufen wurde. Mit call() kann man beim Aufruf einer bestehenden Funktion einen beliebigen Wert als this setzen, ohne die Funktion zuerst als Eigenschaft an das Objekt zu binden. Dies ermöglicht die Nutzung von Methoden eines Objekts als generische Hilfsfunktionen.

Warnung: Verwenden Sie call() nicht, um Konstruktoren zu verketten (zum Beispiel zur Implementierung von Vererbung). Dies ruft die Konstruktorfunktion als normale Funktion auf, was bedeutet, dass new.target undefined ist und Klassen einen Fehler werfen, weil sie nicht ohne new aufgerufen werden können. Verwenden Sie stattdessen Reflect.construct() oder extends.

Beispiele Verwenden von call(), um eine Funktion aufzurufen und den this-Wert festzulegen

Im folgenden Beispiel wird beim Aufruf von greet der Wert von this an das Objekt obj gebunden, auch wenn greet keine Methode von obj ist.

function greet() {
  console.log(this.animal, "typically sleep between", this.sleepDuration);
}

const obj = {
  animal: "cats",
  sleepDuration: "12 and 16 hours",
};

greet.call(obj); // cats typically sleep between 12 and 16 hours
Verwenden von call(), um eine Funktion ohne Angabe des ersten Arguments aufzurufen

Wenn der erste thisArg Parameter weggelassen wird, bleibt er bei undefined. Im Nicht-Strict Mode wird der this-Wert dann durch globalThis ersetzt (was dem globalen Objekt ähnlich ist).

globalThis.globProp = "foo";

function display() {
  console.log(`globProp value is ${this.globProp}`);
}

display.call(); // Logs "globProp value is foo"

Im Strict Mode wird der Wert von this nicht ersetzt, so dass er undefined bleibt.

"use strict";

globalThis.globProp = "foo";

function display() {
  console.log(`globProp value is ${this.globProp}`);
}

display.call(); // throws TypeError: Cannot read the property of 'globProp' of undefined
Verwandeln von Methoden in Hilfsfunktionen

call() ist fast gleichbedeutend mit einem normalen Funktionsaufruf, außer dass this als normales Parameter übergeben wird, anstatt als der Wert, auf dem die Funktion aufgerufen wurde. Dies ist ähnlich wie bei allgemeinen Hilfsfunktionen: anstatt array.map(callback) aufzurufen, verwenden Sie map(array, callback), was Ihnen erlaubt, map mit array-ähnlichen Objekten zu verwenden, die keine Arrays sind (zum Beispiel arguments), ohne Object.prototype zu verändern.

Nehmen Sie Array.prototype.slice() zum Beispiel, die Sie verwenden möchten, um ein array-ähnliches Objekt in ein echtes Array zu konvertieren. Sie könnten eine Abkürzung wie diese erstellen:

const slice = Array.prototype.slice;

// …

slice.call(arguments);

Beachten Sie, dass Sie slice.call nicht speichern und als einfache Funktion aufrufen können, da die call() Methode auch ihren this-Wert ermittelt, der die Funktion ist, die sie aufrufen soll. In diesem Fall können Sie bind() verwenden, um den Wert von this für call() zu binden. Im folgenden Code ist slice() eine gebundene Version von Function.prototype.call(), wobei der Wert von this an Array.prototype.slice() gebunden ist. Das bedeutet, dass zusätzliche call() Aufrufe beseitigt werden können:

// Same as "slice" in the previous example
const unboundSlice = Array.prototype.slice;
const slice = Function.prototype.call.bind(unboundSlice);

// …

slice(arguments);
Spezifikationen Browser-Kompatibilität Siehe auch

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4