Den Kontext des Schlüsselworts 'this' mit jQuery verwenden

7

Als jQuery-Neuling bin ich etwas verwirrt von den verschiedenen Kontexten, in denen das dies Schlüsselwort verwendet wird. Manchmal bezieht es sich auf ein DOM-Element, z. this.id und manchmal verweist es auf ein jQuery-Objekt, z. $ (this) .val () .

Remy Sharps Blogpost ist hilfreich, aber ich würde gerne zu wissen, wie du einem Neuling den Unterschied erklären würdest. Ist der Unterschied ausschließlich ein jQuery-Problem oder allgemein für alle Javascript?

Danke für alle bisherigen Antworten - tolle Sachen, ich werde mir morgen eine Antwort aussuchen. Hier ist ein weiterer Blog-Beitrag, den ich später fand, der auch hilfreich war: Was ist das? von Mike Alsup .

    
eft 16.02.2009, 02:57
quelle

4 Antworten

17

Remy Sharps Beitrag ist verwirrend, wenn Sie ihn meiner Meinung nach nicht sorgfältig lesen. Die Bedeutung von this ändert sich nie. In dem von Ihnen angegebenen Beispiel gab es 2 Verwendungen von this . Als DOM-Element in einem Event:

%Vor%

und als jQuery-Objekt in ein Ereignis eingepackt:

%Vor%

Wenn Sie die zwei obigen Snippets sehr aufmerksam lesen, werden Sie feststellen, dass this niemals die Bedeutung ändert. Es bezieht sich immer auf das DOM-Element. Der Unterschied kommt darin, wie es benutzt wird.

In jQuery verweist this standardmäßig auf das DOM-Element (kein jQuery-Objekt), das ein Ereignis ausgelöst hat. Im zweiten Code-Snippet oben ist immer noch dasselbe DOM-Element, nur wird es in ein jQuery-Element eingeschlossen, indem es um $() gewickelt wird. Wie bei jedem Argument für den jQuery-Konstruktor wird durch die Übergabe von this an den Konstruktor ein jQuery-Objekt transformiert.

Ich denke, die Verwirrung entsteht, wenn Remy im selben Artikel wie jQuery-Ereignisse über jQuery-Plugins spricht. jQuery-Plugins sind etwas, was die Leute selten schreiben und häufig verwenden. Wenn Sie ein jQuery-Plugin schreiben, arbeiten Sie im Kontext des jQuery-Objektprototyps. In diesem Fall verwenden Sie das Wort this , um auf das Plugin zu verweisen, das Sie schreiben. In normalen Anwendungsfällen werden Sie nicht oft Plugins schreiben, daher ist dies ein viel selteneres Szenario. Wenn Sie nicht im Bereich des Plugins sind, können Sie this nicht verwenden, um auf das jQuery-Objekt zu verweisen.

In der Sprache JavaScript bezieht sich das Schlüsselwort this auf die aktuelle Instanz eines Objekts in JavaScript. Wenn es in einem JavaScript-Prototyp verwendet wird, bezieht es sich auf die Instanz des Prototyps. Abhängig vom Browser bezieht sich this bei Verwendung des Nicht-jquery-Ereignismodells auch auf das DOM-Element. Da einige Browser (Internet Explorer) nicht auf this als DOM-Element in einem Ereignis verweisen, wird die Arbeit mit Ereignissen erschwert. Um dies zu umgehen, führt jQuery eine JavaScript-Magie aus, die immer this auf das DOM-Element verweist, das das Ereignis ausgelöst hat. Das ist (einer der vielen) Gründe, ein JavaScript-Framework zu verwenden, anstatt selbst zu rollen.

    
Dan Herbert 16.02.2009, 03:22
quelle
4

Vergessen Sie nicht, dass Sie, wenn Sie sich nicht sicher sind, was das "dies" in irgendeinem gegebenen Kontext ist, es in Firebug mit der Konsole diagnostizieren können:

%Vor%

Wenn Sie jQuery verwenden (wie Sie bereits erwähnt haben), können Sie immer sicherstellen, dass "dies" immer noch ein jQuery-Objekt ist:

%Vor%

Dann können Sie in der Konsole sehen, was das jQuery-Objekt von "this" ist, indem Sie es in Firebug:

protokollieren %Vor%

Schließlich, da wir über jQuery sprechen, gibt es einige Fälle, in denen sich "dies" ändert. Zum Beispiel, wenn Sie nach einer Animation oder einem FadeIn oder FadeOut einen Callback durchführen. In diesem Zusammenhang würde sich das "Dies" auf den Gegenstand beziehen, der den Effekt erhält.

Denken Sie nur daran, wenn Sie sich nicht sicher sind, was "das" ist ... fragen Sie den Firebug. Der Firebug sieht alles. Der Firebug kennt alles.

    
Jeremy Ricketts 16.02.2009 04:09
quelle
2
  

bezieht sich manchmal auf ein jQuery-Objekt, z. $ (this) .val () .

this bezieht sich hier auf ein DOM-Element; Der Funktionsaufruf $ () umschließt das DOM-Element in einem jQuery-Objekt. Bei jQuery-Ereignisrückrufen verweist this (fast?) Immer auf ein DOM-Element. Beim Schreiben einer Funktion, die jQuery erweitert, kann diese mit $ ('select'). Myfunc () aufgerufen werden, this verweist auf ein jQuery-Objekt.

In JavaScript im Allgemeinen gilt this , wenn eine Funktion als Eigenschaft eines Objekts aufgerufen wird (der methodenorientierte Aufruf). Also mit der Funktion:

%Vor%

In Javascript hängt also die Art des Objekts, auf das 'dies' in einer Funktion verweist, mehr davon ab, wie eine Funktion aufgerufen wird als die eigentliche Definition der Funktion.

    
Miles 16.02.2009 03:08
quelle
2

jQuery Proxy könnte Ihnen helfen, Ihre Antwort zu erhalten. Sie können eine jQuery -Funktion aufrufen und ändern, auf welches Objekt sich der this -Bereich bezieht.

z.B. etwas wie:

%Vor%     
jdog 22.01.2012 02:16
quelle

Tags und Links