2010-12-13 6 views
2

Mögliche Duplizieren:
What is the difference between call and apply?bitte erklären, die Anwendung und Call-Methoden in Javascript

Was zwischen Anwendung und rufen Methoden der Hauptunterschied ist ... ich durch das Netz gehen, aber nicht in der Lage, die beste Lösung zu finden .. Bitte helfen Sie mir Freunde ...

+0

Es gibt keine * beste * Lösung;) –

+0

@Felix: +1, mir ist nicht in den Sinn gekommen, dass das wohl ein Betrogener wäre. –

+0

@Felix Kling: Ups, habe das nicht bemerkt;) – jwueller

Antwort

5

Jede Funktion in JavaScript erhält zwei Objekte zusätzlich zu den Standardparametern. Diese sind this und arguments. Der Wert this wird durch sein Aufrufmuster bestimmt. apply oder call kann verwendet werden, um eine Funktion aufzurufen und ein Standardobjekt this bereitzustellen.

Dies wird in vielen Situationen sehr nützlich sein. Zum Beispiel ist arguments ein Array-ähnliches Objekt, aber nicht wirklich ein Array mit allen nützlichen Array-Methoden. Also, ein Array-Methode slice auf arguments anwenden, können Sie dies tun:

Array.prototype.slice.apply(arguments, [1, 2]) 

Hatte arguments ein Objekt von Array Typ gewesen, Sie

genutzt haben könnte
arguments.slice(1, 2) 

call ist nichts anderes als eine modifizierte Version von anwenden. Siehe den Kommentar von unfassbar.

Mr.Douglus Crockford gibt eine sehr gute Einführung in JavaScript-Funktionen in diesem Video: Function the Ultimate.

+0

Welche Relevanz haben die Sachen über 'Argumente'? –

+2

OP stellt seit einiger Zeit Fragen zu JavaScript. Ich nahm an, dass er mit JS anfing. Ich dachte, eine richtige Einführung in das Funktionsaufrufmuster wäre für ihn nützlich. :) – dheerosaur

3

.apply() und .call() sind sehr ähnlich. Der einzige Unterschied besteht darin, wie sie Argumente an die aufgerufene Funktion übergeben. .apply() nimmt ein Array von Argumenten, während .call() kann wie ein normaler Funktionsaufruf verwendet werden:

someFunction.apply(context, [argument1, argument2]); 

entsprechen:

someFunction.call(context, argument1, argument2); 
+0

Danke und schön zu hören .. aber können wir jede Methode verwenden in jeder Situation oder gibt es irgendwelche Einschränkungen für diese Methoden. – Mihir

+0

@Mihir: Beide Methoden sind Mitglieder des Funktionsobjekts Prototyp. Beide können für jede Funktion verwendet werden. – jwueller

3

Der Hauptunterschied besteht darin, dass call eine Liste von Argumenten akzeptiert, wo Argumente

myFunc.call(thisObj, arg1, arg2, arg3); 

Während apply akzeptiert nur zwei ar: nach dem ersten direkt an die Methode übergeben werden, gumente - die erste ist die this Objekt und das zweite ist ein Array von Argumenten an die Methode übergeben:

myFunc.apply(thisObj, [arg1, arg2, arg3]); 

apply oft in einer Situation verwendet wird, in dem Sie das arguments Objekt übergeben werden soll, die eine Liste enthält von Argumente, die an die aktuelle Funktion übergeben werden, an eine andere Methode:

function myOtherFunc(arg1, arg2, arg3) { 
    if (typeof arg1 == "object" && arg1 !== null) 
     myFunc.apply(this, arguments); 
} 
+0

Danke und schön zu hören .. aber können wir jede Methode in jeder Situation verwenden oder gibt es irgendwelche Einschränkungen für diese Mehtods .. – Mihir

+0

@Mihir: 'apply' kann anstelle von' call' verwendet werden, so ziemlich überall Sie denken können von. "Call" ist jedoch kein großer Ersatz für "apply", weil es nicht so dynamisch ist. Ich habe meine Antwort aktualisiert, um Ihnen ein Beispiel für "apply" zu geben. –

+1

@Mihir: 'Call' ist nur syntaktischer Zucker für' apply'. Erleichtert das Aufrufen von Funktionen mit nur einem Parameter. –

Verwandte Themen