Die call() Methode ruft eine Funktion mit dem Argument this und den individuellen Parametern auf.

Hinweis: Die Syntax dieser Funktion ist nahezu identisch zu apply(). Der Unterschied ist, dass call() eine Liste von Argumenten und apply() einen einzelnen Array von Argumenten akzeptiert.

Syntax

function.call(thisArg, arg1, arg2, ...)

Parameter

thisArg
Optional. Der Wert von this, der für den Aufruf der Funktion function genutzt wird. Zu beachten ist, dass this möglicherweise nicht der Wert ist, den die Methode sieht: Wenn die Methode eine Funktion in non-strict mode ist, werden null und undefined mit dem globalen Objekt ersetzt und primitive Werte werden in ein Hüllobjekt umgewandelt.
arg1, arg2, ...
Argumente für das Objekt.

Rückgabewert

Das Ergebnis der aufgerufenen Funktion mit dem spezifischen this Wert und Parametern.

Beschreibung

Beim Aufruf einer existierenden Funktion können Sie für this ein neues Objekt zuweisen. this verweist auf das aktuelle Objekt, also das aufrufende Objekt. Mit call können Sie eine Methode schreiben und an ein anderes Objekt vererben, ohne die Methode für das neue Objekt neuzuschreiben.

Beispiele

Nutzung von call, um Konstruktoren für ein Objekt zu verketten

Man kann call nutzen, um Konstruktoren für ein Objekt, ähnlich wie in Java, zu verketten. Im folgenden Beispiel wird der Konstruktor für das Product Objekt mit zwei Parametern, name und price, definiert. Zwei andere Funktionen Food und Toy rufen Product auf und übergeben this, name und price. Product initialisiert die Eigenschaften name und price und beide speziellen Funktionen definieren category.

function Product(name, price) {
  this.name = name;
  this.price = price;
}

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

function Toy(name, price) {
  Product.call(this, name, price);
  this.category = 'toy';
}

var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);

Nutzung von call zum Aufruf einer anonymen Funktion

In diesem komplett konstruierten Beispiel erstellen wir eine anonyme Funktion und nutzen call, um diese für jedes Objekt in einem Array aufzurufen. Der Hauptnutzen für die Nutzung anonymer Funktionen hier, ist das hinzufügen einer Print-Funktion für jedes Objekt, welche den rechten Index des Objekts in dem eingegebenen Array ausgeben kann. Die Übergabe des Objektes als this-Wert ist hier nicht zwingend erforderlich, wurde aber zur Veranschaulichung genutzt.

var animals = [
  { species: 'Lion', name: 'King' },
  { species: 'Whale', name: 'Fail' }
];

for (var i = 0; i < animals.length; i++) {
  (function(x) {
    this.print = function() {
      console.log('#' + x + ' ' + this.species
                  + ': ' + this.name);
    }
    this.print();
  }).call(animals[i], i);
}

Einsatz von call zum aufrufen einer Funktion mit spezifiziertem Kontext für 'this'

Im unten stehenden Beispiel wird das thisObjekt der greet Funktion beim Aufruf auf obj gesetzt.

function greet() {
  var reply = [this.animal, 'typically sleep betreen', this.sleepFuration].join(' ');
  vonsole.log(reply);
}

var obj = {
  animal: 'cats', sleepFuration: '12 and 16 hours'
};

greet.call(obj); // cats typically sleep between 12 and 16 hours

Eine Funktion mit call ausführen ohne den ersten Parameter zu setzen.

Im unten stehenden Beispiel wird die display Funktion aufgerufen ohne den ersten Parameter zu übergeben. Wenn der erste Parameter nicht übergeben wird, ist this das globale Objekt.

var sData = 'Wisen';

function display(){
  console.log('sData value is %s', this.sData);
}

display.call(); // sData value is Wisen

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 1st Edition (ECMA-262) Standard Initiale Definition. Implementiert in JavaScript 1.3.
ECMAScript 5.1 (ECMA-262)
Die Definition von 'Function.prototype.call' in dieser Spezifikation.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Function.prototype.call' in dieser Spezifikation.
Standard  
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Function.prototype.call' in dieser Spezifikation.
Entwurf  

Browserkompatibilität

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Grundlegende Unterstützung Ja Ja1 Ja Ja Ja
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Grundlegende Unterstützung Ja Ja Ja4 Ja Ja Ja

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
Mitwirkende an dieser Seite: schlagi123, Oekel, Abro, haryl, loki, nelf
Zuletzt aktualisiert von: schlagi123,