Diese Übersetzung ist unvollständig. Bitte helfen Sie, diesen Artikel aus dem Englischen zu übersetzen.
Zusammenfassung
Die call()
Methode ruft eine Funktion mit dem Argument this und den individuellen Argumenten auf.
Notiz: 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
fun.call(thisArg[, arg1[, arg2[, ...]]])
Parameter
thisArg
- Der Wert von
this
, der für den Aufruf der Funktionfun
bereitgestellt wird. Beachten Sie, dassthis
möglicherweise nicht der Wert ist, den die Methode sieht: Wenn die Methode eine Funktion in non-strict mode Code ist, werdennull
undundefined
mit dem globalen Objekt ersetzt und primitive Werte werden in ein Hüllobjekt umgewandelt ("eingepackt"). arg1, arg2, ...
- Argumente für das Objekt.
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
Beispiel: Nutzung von call
, um Konstruktoren für ein Objekt zu verketten
Sie können 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; if (price < 0) { throw RangeError('Cannot create product ' + this.name + ' with a negative price'); } return this; } function Food(name, price) { Product.call(this, name, price); this.category = 'food'; } Food.prototype = Object.create(Product.prototype); function Toy(name, price) { Product.call(this, name, price); this.category = 'toy'; } Toy.prototype = Object.create(Product.prototype); var cheese = new Food('feta', 5); var fun = new Toy('robot', 40);
Beispiel: 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 der Objekte als this
-Wert ist nicht zwingend notwendig, wird aber zur Erklärung gemacht.
var animals = [ { species: 'Lion', name: 'King' }, { species: 'Whale', name: 'Fail' } ]; for (var i = 0; i < animals.length; i++) { (function(i) { this.print = function() { console.log('#' + i + ' ' + this.species + ': ' + this.name); } this.print(); }).call(animals[i], i); }
Spezifikationen
Spezifikation | Status | Kommentar |
---|---|---|
ECMAScript 3rd Edition. | Standard | Initiale Definition. Implementiert in JavaScript 1.3. |
ECMAScript 5.1 (ECMA-262) Die Definition von 'Function.prototype.call' in dieser Spezifikation. |
Standard | |
ECMAScript 6 (ECMA-262) Die Definition von 'Function.prototype.call' in dieser Spezifikation. |
Anwärter Empfehlung |
Browserkompatibilität
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basis Support | (Ja) | (Ja) | (Ja) | (Ja) | (Ja) |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basis Support | (Ja) | (Ja) | (Ja) | (Ja) | (Ja) | (Ja) |