this
- элемент, $(this)
- объект jQuery, созданный с этим элементом
$(".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);
});
Более глубокий взгляд
this
MDN содержится в контексте выполнения
Область действия относится к текущему Контекст выполнения ECMA . Чтобы понять this
, важно понять, как контексты выполнения работают в JavaScript.
контексты выполнения связывают это
Когда элемент управления входит в контекст выполнения (код выполняется в этой области), среда для переменных настраивается (лексическая и переменная среды - по сути, это устанавливает область для ввода переменных, которые уже были доступны, и область для локальных переменные, которые будут сохранены), и происходит привязка this
.
jQuery связывает это
Контексты выполнения образуют логический стек. В результате контексты, расположенные глубже в стеке, имеют доступ к предыдущим переменным, но их привязки могут быть изменены. Каждый раз, когда jQuery вызывает функцию обратного вызова, он изменяет эту привязку , используя apply
MDN .
callback.apply( obj[ i ] )//where obj[i] is the current element
Результатом вызова apply
является то, что внутри функций обратного вызова jQuery, this
относится к текущему элементу , используемому функцией обратного вызова.
Например, в .each
обычно используемая функция обратного вызова допускает .each(function(index,element){/*scope*/})
. В этой области this == element
верно.
Обратные вызовы jQuery используют функцию apply, чтобы связать функцию, вызываемую с текущим элементом. Этот элемент происходит из массива элементов объекта jQuery. Каждый созданный объект jQuery содержит массив элементов, которые соответствуют селектору API jQuery , который использовался для создания экземпляра объекта jQuery.
$(selector)
вызывает функцию jQuery (помните, что $
является ссылкой на jQuery
, код: window.jQuery = window.$ = jQuery;
). Внутри функция jQuery создает экземпляр функционального объекта. Поэтому, хотя это может быть неочевидно, использование $()
для внутреннего использования new jQuery()
. Частью конструкции этого объекта jQuery является поиск всех совпадений селектора. Конструктор также принимает строки html и элементы . Когда вы передаете this
в конструктор jQuery, вы передаете текущий элемент для объекта jQuery, который будет создан с . Затем объект jQuery содержит массивоподобную структуру элементов DOM, соответствующих селектору (или только один элемент в случае this
).
После создания объекта jQuery API jQuery теперь доступен. Когда вызывается функция API jQuery, она будет внутренне выполнять итерацию по этой массивоподобной структуре. Для каждого элемента в массиве он вызывает функцию обратного вызова для API, связывая this
обратного вызова с текущим элементом. Этот вызов можно увидеть в приведенном выше фрагменте кода, где obj
- массивоподобная структура, а i
- итератор, используемый для позиции в массиве текущего элемента.