2010-10-08 19 views
35

Jaka jest różnica między tymi trzema postaciami:

this 
$this 
$(this) 

Odpowiedz

48

W typowym użytkowania będzie można je zobaczyć jak to (korzystanie $this mogą ulec zmianie):

  • this - Odnosi się do elementu DOM w przewodnika Aktualnie jesteś, ale może to być innym obiektem całkowicie w innych sytuacjach, ale zawsze jest to kontekst.
  • $this - Zwykle tworzona przez var $this = $(this) buforowaną wersję jQuery w opakowaniu o większej wydajności (lub łańcuszku $(this), aby uzyskać to samo w wielu przypadkach).
  • $(this) - Zawarta w jQuery wersja elementu, dzięki czemu masz dostęp do all its methods (szczególnie te w $.fn).
+1

Zanim jQuery była sławna, pamiętam, że '$ this' używany jest do odniesienia do obiektu obiektu nadrzędnego, w rodzaju' var that'. Jednak widzę, jak jQuery fenomena mogła wpłynąć na jego znaczenie. –

+0

Ta odpowiedź zakłada, że ​​znajdujemy się w procedurze obsługi zdarzeń: Odpowiedź Alisey jest bardziej ogólna. – meouw

+0

@meouw - Nie sądzę, że zakładam, że natychmiast ją odrzucę: "ale może to być inny obiekt całkowicie w innych sytuacjach". * Większość * czasu, w którym to widzisz, to miejsce, w którym się znajdujesz (jesteśmy przede wszystkim kierowani wydarzeniami), ale nie jedyne miejsce, oczywiście. –

30
  • this jest przedmiotem, na którym metoda nazwano
  • $this jest źle nazwane zmienne bez szczególnego znaczenia
  • $(this) nazywa słabo nazwana funkcja $ z this jako jedynym argumentem
+1

lol. krótki i czysty. lubię +1. –

+0

Ich nazwy zmiennych zostały wybrane ... słabo. – PaulJWilliams

+15

Nie zgadzam się na twoim # 2, jest to doskonale poprawna nazwa dokładnie tego, do czego była użyta, jest to jquery zawijana wersja 'tego' ... jak byś to nazwał? biorąc pod uwagę, że '$ var' dla obiektów jQuery jest powszechnie używaną konwencją? A dla # 3, jaki zamiennik sugerujesz? Istnieje powód, dla którego wybrało to kilka bibliotek (jQuery, MooTools, Prototype, Microsoft's ....). –

1

W kontekście jQuery "to" jest obiektem, na którym wywołano metodę. "$ this" jest rzeczywiście źle nazwaną zmienną bez specjalnego znaczenia. '$ (this)' przekazuje 'to' do jQuery, które zwróci obiekt jQuery skojarzony z czymkolwiek "to", o ile "to" jest obiektem DOM.

0

Twoje pytanie będzie lepiej obsługiwane z większym kontekstem.

Jednak zakładam, że pytasz o zmienne w kontekście wywołania zwrotnego zdarzenia elementu (na przykład click).

  • this jest kontekst swojej obsługi (zazwyczaj elementu DOM, w przypadku obsługi zdarzeń DOM)
  • $this jest zazwyczaj używany do przechowywania wynik $(this)
  • $(this) zwraca obiekt jQuery, że opakowuje this - więcej informacji na ten temat można znaleźć w artykule jQuery documentation.
0

Rozszerzenie na co Dawid powiedział:

  • $this jest zwykle używany, aby mieć kopię obiektu this w bieżącym zakresie. Na przykład z var $this = this; możesz użyć zmiennej $this w dowolnym miejscu bieżącego zakresu i zawsze możesz odwoływać się do tego obiektu, który w przeciwnym razie zostałby zmieniony, jeśli po prostu zostałby wymieniony z this ...Ja osobiście lubię $this konwencji nazewnictwa i wolą coś podobnego var parentScope

  • $(this) jest funkcją (var $ = function(){}) używany przez niektórych ram takich jak jQuery lub PrototypeJs. Powodem jest używany dlatego $ jest bardzo łatwy do pisania zamiast someLongFunctionName i dlatego nazywa się zwykle wiele razy w kodzie łatwiej mają być jak najkrótsze

9

W przypadku jQuery handler:

  • this - jest elementem DOM przypisany obsługi zdarzeń do
  • $(this) - jest obiektem jQuery tworzone z tha T elementu
  • $this - zwykle zmienną gospodarstwa wynik $(this)

Bardziej ogólnie:

  • to wewnątrz funkcji odnosi się do obiektu lub pierwotnej funkcji nazywa na. Gdy funkcja jest używana jako konstruktor, odnosi się ona do konstruowanego nowego obiektu. Poza każdą funkcją this odnosi się do obiektu globalnego (window w trybie nie ścisłym).

    Możesz znaleźć good detailed explanation on MDN.

  • $ this to nazwa zmiennej. W nazwach zmiennych JavaScript można zaczynać od $. Niektórzy lubią używać go jako przedrostek dla zmiennych zawierających obiekty jQuery:

    var body = document.body; // no prefix for a plain DOM object 
    var $body = jQuery('body'); // prefix for the same object wrapped in jQuery 
    var $this = $(this); 
    
  • $ (this) jest wywołanie funkcji, gdzie $ to nazwa funkcji, a this jest jej argument:

    var $ = alert; 
    $(this); // [object Window] 
    

    $ nie ma żadnego specjalnego znaczenia per se. Ale jQuery definiuje funkcję $() jako skrót dla jQuery(). W zależności od argumentów funkcja ta może wykonać many different things.