Movatterモバイル変換


[0]ホーム

URL:


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

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.call()

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⁩.

Diecall() Methode vonFunction Instanzen ruft diese Funktion mit einem angegebenenthis-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

js
call(thisArg)call(thisArg, arg1)call(thisArg, arg1, arg2)call(thisArg, arg1, arg2, /* …, */ argN)

Parameter

thisArg

Der Wert, der alsthis beim Aufruf vonfunc verwendet werden soll. Wenn die Funktion nicht imStrict Mode ist, werdennull undundefined durch das globale Objekt ersetzt, und primitive Werte werden in Objekte umgewandelt.

arg1, …,argNOptional

Argumente für die Funktion.

Rückgabewert

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

Beschreibung

Hinweis:Diese Funktion ist nahezu identisch mitapply(), außer dass beicall() die Funktionsargumente einzeln als Liste übergeben werden, während sie beiapply() 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 vonthis innerhalb einer Funktion das Objekt, auf dem die Funktion aufgerufen wurde. Mitcall() kann man beim Aufruf einer bestehenden Funktion einen beliebigen Wert alsthis 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 Siecall() nicht, um Konstruktoren zu verketten (zum Beispiel zur Implementierung von Vererbung). Dies ruft die Konstruktorfunktion als normale Funktion auf, was bedeutet, dassnew.targetundefined ist und Klassen einen Fehler werfen, weil sie nicht ohnenew aufgerufen werden können. Verwenden Sie stattdessenReflect.construct() oderextends.

Beispiele

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

Im folgenden Beispiel wird beim Aufruf vongreet der Wert vonthis an das Objektobj gebunden, auch wenngreet keine Methode vonobj ist.

js
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 erstethisArg Parameter weggelassen wird, bleibt er beiundefined. Im Nicht-Strict Mode wird derthis-Wert dann durchglobalThis ersetzt (was dem globalen Objekt ähnlich ist).

js
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 vonthis nicht ersetzt, so dass erundefined bleibt.

js
"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 dassthis als normales Parameter übergeben wird, anstatt als der Wert, auf dem die Funktion aufgerufen wurde. Dies ist ähnlich wie bei allgemeinen Hilfsfunktionen: anstattarray.map(callback) aufzurufen, verwenden Siemap(array, callback), was Ihnen erlaubt,map mit array-ähnlichen Objekten zu verwenden, die keine Arrays sind (zum Beispielarguments), ohneObject.prototype zu verändern.

Nehmen SieArray.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:

js
const slice = Array.prototype.slice;// …slice.call(arguments);

Beachten Sie, dass Sieslice.call nicht speichern und als einfache Funktion aufrufen können, da diecall() Methode auch ihrenthis-Wert ermittelt, der die Funktion ist, die sie aufrufen soll. In diesem Fall können Siebind() verwenden, um den Wert vonthis fürcall() zu binden. Im folgenden Code istslice() eine gebundene Version vonFunction.prototype.call(), wobei der Wert vonthis anArray.prototype.slice() gebunden ist. Das bedeutet, dass zusätzlichecall() Aufrufe beseitigt werden können:

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

Spezifikationen

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

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