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.
Контексти виконання це пов'язують це
Коли управління входить у контекст виконання (код виконується в цій області), середовище для змінних встановлюється (Lexical and Variable Environment - по суті, це встановлює область для змінних, які вже були доступні, і область для локальних змінних зберігається), і відбувається зв’язування 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 використовують функцію застосувати для прив'язки функції, що викликається, з поточним елементом. Цей елемент походить з масиву елементів об’єкта 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 тепер відкритий. Коли викликається функція jQuery api, вона буде внутрішньо повторюватися над цією структурою, подібною до масиву. Для кожного елемента в масиві він викликає функцію зворотного виклику для api, прив'язуючи зворотний виклик this
до поточного елемента. Цей виклик можна побачити в фрагменті коду вище, де obj
є структура, схожа на масив, і i
є ітератором, який використовується для позиції в масиві поточного елемента.