2010-10-08 18 views
35

¿Cuál es la diferencia entre estas tres formas:

this 
$this 
$(this) 

Respuesta

48

En uso típico que se suele ver como esto (el uso $this puede variar):

  • this - Se refiere al elemento DOM en el controlador que está actualmente en, pero esto puede ser otro objeto completamente en otras situaciones, pero siempre es el contexto.
  • $this - Usualmente creado por var $this = $(this) una versión almacenada en caché de la versión envuelta jQuery para mayor eficiencia (o cadena de $(this) para obtener el mismo en muchos casos).
  • $(this) - La versión envuelta jQuery del elemento, por lo que tiene acceso a all its methods (los que están en $.fn específicamente).
+1

Antes de que jQuery fuera famoso recuerdo haber visto '$ this' ser usado para referenciar el objeto del alcance principal, algo así como' var that'. Sin embargo, veo cómo los fenómenos jQuery podrían haber influido en su significado. –

+0

Esta respuesta asume que estamos en un controlador de eventos: la respuesta de Alisey es más general – meouw

+0

@meouw - No creo que asuma eso, lo advierto inmediatamente después: "pero este puede ser otro objeto completamente en otras situaciones". * La mayoría de las veces * cuando estás viendo esto, ahí es donde estás (estamos principalmente impulsados ​​por eventos después de todo), pero no es el único lugar, por supuesto. –

30
  • this es el objeto sobre el cual se llama un método
  • $this es una variable mal llamada sin ningún significado especial
  • $(this) llama al mal función nombrada $ con this como su único argumento
+1

lol. corto y limpio. me gusta +1. –

+0

Sus nombres de variables fueron elegidos ... mal. – PaulJWilliams

+15

No estoy de acuerdo con su # 2, es un nombre perfectamente válido para exactamente para lo que se usó, es una versión jquery de 'this' ... ¿cómo lo llamaría? dado que '$ var' para los objetos jQuery es una convención ampliamente utilizada? Y para el # 3, ¿qué reemplazo sugieres? Hay una razón por la que varias bibliotecas eligieron esto (jQuery, MooTools, Prototype, Microsoft ...). –

1

En el contexto de jQuery, 'este' es el objeto sobre el que se llamó un método. '$ this' es de hecho una variable mal llamada sin ningún significado especial. '$ (this)' pasa 'this' a jQuery, que devolverá un objeto jQuery asociado con lo que sea 'this', siempre que 'this' sea un objeto DOM.

0

Su pregunta sería mejor si tuviera más contexto.

Sin embargo, supongo que está preguntando sobre variables en el contexto de una devolución de llamada en un evento de elemento (click, por ejemplo).

  • this es el contexto de su controlador (normalmente el elemento de DOM, en el caso de un controlador de eventos DOM)
  • $this por lo general se utiliza para almacenar el resultado de $(this)
  • $(this) devuelve el objeto jQuery que Wraps this - consulte jQuery documentation para obtener más información.
0

Ampliando lo que David dijo:

  • $this se utiliza generalmente para tener una copia del objeto this en el ámbito actual. Por ejemplo, con var $this = this;, puede usar la variable $this en cualquier parte del alcance actual y siempre podrá hacer referencia a ese objeto que, de lo contrario, cambiaría si simplemente se hace referencia con this ...Personalmente no me gusta la $this convención de nomenclatura y prefiero algo como var parentScope

  • $(this) es una función (var $ = function(){}) utilizado por algunos frameworks como jQuery o PrototypeJS. La razón por la que se utiliza es porque $ es muy fácil de escribir en lugar de someLongFunctionName y debido a que generalmente se llama muchos veces en el código es más fácil tener que ser lo más corto posible

9

En caso jQuery manejador:

  • this - es un elemento DOM que ha asignado al controlador de eventos a
  • $(this) - es un objeto jQuery creado a partir del tha elemento t
  • $this - típicamente, una variable que contiene el resultado de $(this)

más general:

  • este dentro de una función se refiere al objeto o primitivo la función se llama en. Cuando una función se usa como un constructor, se refiere al nuevo objeto que se está construyendo. Fuera de cualquier función this se refiere al objeto global (window en modo no estricto).

    Puede encontrar good detailed explanation on MDN.

  • $ this es un nombre de variable. En JavaScript, los nombres de las variables pueden comenzar con $. A algunos les gusta usarlo como un prefijo para las variables que contienen objetos 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) es una llamada a la función, donde $ es un nombre de función, y this es su argumento:

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

    $ no tiene ningún significado especial per se. Pero jQuery define la función $() como una abreviatura de jQuery(). Dependiendo de sus argumentos, esta función puede hacer many different things.