Was ist der Unterschied zwischen $ .proxy und dem nativen js 'call' / 'apply'?

8

Ich glaube, beide erlauben Ihnen, den Wert von "das" zu kontrollieren, aber darüber hinaus bin ich ein wenig unklar und Google / SO hilft bisher nicht viel. Jede Klärung geschätzt. Ich habe das gefunden, aber ich bin skeptisch, dass es die ganze Geschichte erzählt:

  

"Als ich zum ersten Mal von der jQuery-Methode proxy () erfuhr, dachte ich, dass es so wäre   ein bisschen dumm; immerhin hat Javascript bereits call () und apply ()   Methoden zum Ändern des Ausführungskontextes. Aber wenn du das erst einmal erkannt hast   Mit der jQuery-Methode proxy () können Sie das Ereignis bind () und unbind () einfach verknüpfen   Handler unabhängig vom Kontext, wird es offensichtlich, wie mächtig   Diese Methode ist.

    
GregT 20.02.2013, 23:11
quelle

3 Antworten

11

call / apply ist ein Single-Shot-Aufruf. $ .proxy erstellt eine neue Funktion, die permanent an etwas gebunden ist:

%Vor%

Zur Vereinfachung ( sehr vereinfacht ) erstellt $.proxy eine neue Funktion, die call aufruft:

%Vor%

Es ist analog zu ES5s Function.prototype.bind

    
Dennis 20.02.2013, 23:24
quelle
5

Sehen Sie sich die jQuery-Quelle an:

%Vor%

Wenn Sie den Caching-Code entfernen und etwas kürzer machen, erhalten Sie im Wesentlichen .apply() (ich denke, ich habe den Slicing-Code korrekt übersetzt):

%Vor%     
Blender 20.02.2013 23:20
quelle
1

$.proxy Sie können eine Funktion aufrufen und die zurückgegebene Funktion hat IMMER einen bestimmten Kontext. Das bedeutet, wenn Sie

ausgeführt haben %Vor%

Es würde 1 protokollieren, da die Funktion immer an das Objekt gebunden ist, das ursprünglich an proxy

übergeben wurde     
Benoir 20.02.2013 23:24
quelle

Tags und Links