Als ich zum ersten Mal einen technischen Artikel übersetzt habe, lachte ich dich aus!
Übersetzter Originaltext:
Function.apply und function.call in JavaScript
Der erste Absatz wird weggelassen.
Jede JavaScript -Funktion verfügt über viele angehängte Methoden, einschließlich ToString (), call () und anwenden (). Es hört sich so an, als würden Sie es seltsam finden, dass eine Funktion ihre eigenen Methoden hat, aber denken Sie daran, dass jede Funktion in JavaScript ein Objekt ist. Schauen Sie sich diesen Artikel an und überprüfen Sie die (Auffrischungs-) JavaScript -Funktionen. Möglicherweise möchten Sie auch den Unterschied zwischen Funktionen und Methoden in JavaScript kennen. Ich denke, die Beschreibung von "Funktionen" und "Methoden" ist nur eine gewohnheitsmäßige Konvention von JavaScript. Funktionen basieren auf sich selbst (z. B.: alert ()), und Methoden sind die Attribute eines Objekts in der Funktion (Wörterbuch), und wir rufen Methoden über Objekte auf. Jedes JavaScript -Objekt hat eine toString () -Methode. Das Folgende ist ein Beispiel für den Code. In einem Funktionsobjekt können wir die Methode toString () verwenden.
Funktion foo () {alert ('x');} alert (foo.toString ());Da Funktionen Objekte sind, haben sie ihre eigenen Eigenschaften und Methoden. Wir können sie als Daten betrachten. In diesem Artikel konzentrieren wir uns nur auf die Methoden von zwei Funktionen an, die () und call () anwenden.
Beginnen wir mit dem folgenden Code:
var x = 10; Funktion f () {alert (this.x);} f ();Wir definieren eine globale Funktion f (). f () greift über dieses Schlüsselwort auf die Variable X zu, aber es ist zu beachten, dass wir diese Funktion nicht über eine Instanz eines Objekts aufrufen können. Auf welches Objekt zeigt dieses Objekt? Dies wird auf dieses globale Objekt hinweisen. Unsere Variable X ist in diesem globalen Objekt definiert. Der obige Code kann normal ausgeführt werden. Das laufende Ergebnis zeigt ein Dialogfeld an und 10 wird im Dialogfeld angezeigt.
Wir können Anruf () anrufen und () bewerben. Wie das folgende Beispiel zeigt, wie Sie call () verwenden:
var x = 10; var o = {x: 15}; Funktion f () {alert (this.x);} f (); f.call (o);Zunächst wird das Aufrufen von F () das Dialogfeld von 10 angezeigt, da dieser zu diesem Zeitpunkt auf das globale Objekt dient. Anschließend rufen wir die CALL () -Methode der F -Funktion auf, der in IS O o o übergebene Parameter und das Laufergebnis zeigt den Wert des X -Attributs in o 15. Die CALL () -Methode verwendet seinen ersten Parameter als Zeiger auf die F -Funktion. Das heißt, wir werden die Laufzeit mitteilen, auf die dies in der F -Funktion dagegen weist.
Dieser Sprung klingt ein bisschen lustig und es ist sogar Anomalie für C ++, Java und C# -Programmierer. Dies sind alles interessante Teile von ECMascript.
Sie können auch Parameter über call () an die Funktion übergeben:
var x = 10; var o = {x: 15}; Funktion f () {alert (this.x);} f (); f.call (o);apply () und call () sind ähnlich, außer dass angewendet () erforderlich ist, dass der zweite Parameter ein Array sein muss. Dieses Array wird als Argument an die Zielfunktion übergeben.
var x = 10; var o = {x: 15}; Funktion f (message) {alert (message); alert (this.x);} f ('aufrufen f');Die Methode apply () ist nützlich, da wir eine Funktion erstellen können, ohne sich um die Parameter der Zielmethode zu kümmern. Diese Funktion kann zusätzliche Parameter über den zweiten Array -Parameter von apply () an die Methode übergeben.
var o = {x : 15};function f1(message1) { alert(message1 + this.x);}function f2(message1, message2) { alert(message1 + (this.x * this.x) + message2);}function g(object, func, args) { func.apply(object, args);}g(o, f1, ['the value of x = ']);g(o, f2, ['Der Wert von X Squared =', 'wow!'];Mit dieser Syntax stimmt etwas nicht. Um die Methode apply () aufzurufen, zwingen wir die Objektivfunktion so, dass die Parameter im Array verwendet werden. Glücklicherweise gibt es eine Möglichkeit, diese Syntax zu erleichtern. Vorher müssen wir zunächst eine einführen: Parameter -Kennung.
In JavaScript hat jede Funktion tatsächlich eine Parameterliste mit variabler Länge. Dies bedeutet, dass wir, selbst wenn eine Funktion nur einen Parameter hat, 5 Parameter übergeben können. Der folgende Code hat keine Fehler, und das Ergebnis zeigt "H".
Funktion f (message) {alert (message);} f ('h', 'e', 'l', 'l', 'o');Wenn wir in f () keine anderen Parameter akzeptieren wollen, können wir die Keyword -Argumente verwenden. Argumente repräsentieren ein Argumentobjekt, das ein Attribut hat, das eine ähnliche Länge wie ein Array darstellt.
Funktion f (message) {// Der Wert der Nachricht ist der gleiche wie Argumente [0] für (var i = 1; i <argumente.length; i ++) {message+= argumente [i]; } alert (message);} // Das Ergebnis zeigt "Hallo" f ('h', 'e', 'l', 'l', 'o');Sie sollten wissen, dass Argumente streng genommen kein Array sind. Argumente haben ein Längenattribut, aber es gibt keine Split-, Push- und POP -Methoden. In der vorherigen G () -Funktion können wir die erforderlichen Parameter aus Argumenten kopieren, ein Array bilden und dieses Array an die Anwendung () übergeben.
var o = {x: 15}; Funktion f (message1, message2) {alert (message1 + (this.x * this.x) + message2);} Funktion g (Objekt, func) {// Argumente [0] = Objekt // Argumente [1] = Func var args = []; für (var i = 2; i <argumente.length; i ++) {args.push (Argumente [i]); } func.apply (Objekt, args);} g (o, f, 'Der Wert von x quared =', '. wow!');Wenn wir G () anrufen, können wir zusätzliche Argumente als Parameter übergeben, anstatt die Argumente in ein Array zu füllen.