2009-07-21 12 views
7

Me preguntaba por qué en tantos plugins de jquery $ (esto) está configurado para apuntar a $ this, aquí hay un ejemplo, si tengo los siguientes dos complementos incluidos en una página:

(function($) { 
    jQuery.fn.pluginOne = function() { 
     return this.each(function() { 
     $this = $(this); <-- 
     alert($this); 
     }); 
    }; 
})(jQuery) 

(function($) { 
    jQuery.fn.pluginTwo = function() { 
     return this.each(function() { 
     $this = $(this); <-- 
     alert($this); 
     }); 
    }; 
})(jQuery) 

cuando llamo ambos plugins en listo dom:

$(document).ready({ 
    $('.myClass').pluginOne(); 
    $('.myOtherClass').pluginTwo(); 
}); 

el primer plugin obtendrá $ esto desde el segundo complemento ... mientras señalo $ (este) a una var local:

(function($) { 
    jQuery.fn.pluginTwo = function() { 
     return this.each(function() { 
     var trigger = $(this); <-- 
     alert(trigger); 
     }); 
    }; 
})(jQuery) 

todo funciona como debería, por supuesto ...

Así que mi pregunta es ... ¿cuándo debería usar $ this?

Gracias

+0

Sólo para aclarar ... En el ejemplo anterior $ (' MyOtherClass.) PluginTwo (.); devolverá el primer elemento de la siguiente matriz: $ ('.myClass') –

Respuesta

12

$ este es un pueblo estándar utilizan para almacenar en caché el objeto jQuery real $ (este) en una variable.

Puede llamarlo como desee, a algunas personas les gusta referirse a él como $ self.

por ejemplo

var $self = $(this) 

Sólo ayuda cuando usted está buscando en el código de reconocer que se trata de un objeto jQuery en lugar de un objeto DOM normal.

Funciona mejor ya que solo crea una instancia de la variable jQuery.

+0

El punto sería que debería ser 'var $ this' en el ejemplo anterior, entonces? – ijw

+1

$ cualquiera sea el punto – redsquare

+0

... de su respuesta, sí. Me parece la pregunta original relacionada con $ this scoping y, de hecho, que el póster es correcto (que una variable debe ser local) y que tiene dos complementos que (a) usan $ this como una convención, no porque tiene un significado inherente y (b) no lo abarca correctamente. – ijw

2

si está realizando una serie de diferentes comandos con un elemento envuelto en un objeto jQuery, entonces es más performante para obtener el elemento (como un conjunto envuelto) sólo una vez y almacenar que en una variable local

var $this = $(this); 
// then use $this in your function. 

Nota el uso de var al ámbito local $this

9

$ es un personaje legítimo para los nombres de variables y funciones en Javascript. Eso puede ser confuso si vienes de PHP, donde $ se usa para significar una variable solamente (me tomó un tiempo darme cuenta).

  • En jQuery, $ es un alias para la función jQuery, que es la función principal que se encarga de la selección de DOM. $("#header ul.menu") es lo mismo que jQuery("#header ul.menu"). $ se usa simplemente por brevedad.

  • this es un término especial en Javascript (no jQ) que significa el elemento actual (en los formularios que puede ver this.submit() por ejemplo).

  • $(this) significa "llamar a la función jQuery con Javascript this".

  • $this es simplemente una variable, ya que $ es un carácter válido. Puede establecer $this en cualquier valor que desee y no tiene nada que ver con el this de Javascript.En general, sugiero NO usar $ para nombres de variables para evitar confusiones con la función jQuery. Sin embargo, puede ser útil utilizar $var para designar objetos jQuery en lugar de variables Javascript normales.

+1

De hecho, sugiero usar $ como el primer caracter de una variable al usar jQuery. Lo uso todo el tiempo para denotar el hecho de que cierta variable es un objeto jQuery, como $ this = $ (this). – EndangeredMassa

+0

Buen punto, EM. Edité mi respuesta. – DisgruntledGoat

+0

@EM Esa es una * buena * idea, creo que podría comenzar con eso. – ijw