this
es el elemento, $(this)
es el objeto jQuery construido con ese elemento
$(".class").each(function(){
//the iterations current html element
//the classic JavaScript API is exposed here (such as .innerHTML and .appendChild)
var HTMLElement = this;
//the current HTML element is passed to the jQuery constructor
//the jQuery API is exposed here (such as .html() and .append())
var jQueryObject = $(this);
});
Una mirada más profunda
this
MDN está contenido en un contexto de ejecución
El alcance se refiere a la corriente Execution ContextECMA. Para comprender this
, es importante entender cómo funcionan los contextos de ejecución en JavaScript.
contextos de ejecución se unen este
Cuando el control entra en un contexto de ejecución (código está siendo ejecutado en ese ámbito) el medio ambiente para las variables son de configuración (Entornos léxicas y variables - esencialmente Esto establece un área para las variables a ingrese cuáles ya eran accesibles, y un área para almacenar las variables locales), y se produce el enlace de this
.
jQuery une esta
contextos de ejecución de formar una pila lógica. El resultado es que los contextos más profundos en la pila tienen acceso a las variables anteriores, pero sus enlaces pueden haber sido alterados. Cada vez que jQuery llama a una función de devolución de llamada, altera el enlace utilizando apply
MDN.
callback.apply(obj[ i ])//where obj[i] is the current element
El resultado de la llamada apply
es que dentro de las funciones de devolución de llamada jQuery, this
se refiere al elemento actual siendo utilizado por la función de devolución de llamada. Por ejemplo, en .each
, la función de devolución de llamada comúnmente utilizada permite .each(function(index,element){/*scope*/})
. En ese alcance, this == element
es verdadero.
Las devoluciones de llamada de jQuery usan la función apply para enlazar la función que se está llamando con el elemento actual. Este elemento proviene de la matriz de elementos del objeto jQuery. Cada objeto jQuery construido contiene una matriz de elementos que coinciden con el selectorjQuery API que se utilizó para crear una instancia del objeto jQuery.
$(selector)
llama a la función jQuery (recordemos que $
es una referencia a jQuery
, código: window.jQuery = window.$ = jQuery;
). Internamente, la función jQuery crea una instancia de un objeto de función. Entonces, aunque puede no ser inmediatamente obvio, el uso de $()
internamente usa new jQuery()
. Parte de la construcción de este objeto jQuery es encontrar todas las coincidencias del selector. El constructor también aceptará las cadenas html y los elementos. Cuando pase this
al constructor jQuery, está pasando el elemento actual para que se construya un objeto jQuery con. El objeto jQuery contiene una estructura similar a una matriz de los elementos DOM que coinciden con el selector (o solo el elemento individual en el caso de this
).
Una vez que se construye el objeto jQuery, la API de jQuery queda expuesta. Cuando se llama a una función jQuery api, iterará internamente sobre esta estructura similar a una matriz. Para cada elemento de la matriz, llama a la función de devolución de llamada para la API, vinculando la devolución de llamada this
al elemento actual. Esta llamada se puede ver en el fragmento de código anterior, donde obj
es la estructura similar a una matriz, y i
es el iterador utilizado para la posición en la matriz del elemento actual.
@Reigel, ¿por qué estaba protegido? El OP cuestionó y adivinó la respuesta correcta. – vol7ron
@Reigel: Creo que debería preguntar esto en meta, pero si eso es todo lo que se necesita para la protección, ¿no deberían todas las preguntas estar * protegidas * – vol7ron