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);
});
Глибший погляд
thisMDN міститься у контексті виконання
Область стосується поточного контексту виконання ECMA . Аби зрозумітиthis , важливо зрозуміти спосіб роботи контекстів виконання в JavaScript.
Контексти виконання це пов'язують це
Коли управління входить у контекст виконання (код виконується в цій області), середовище для змінних встановлюється (Lexical and Variable Environment - по суті, це встановлює область для змінних, які вже були доступні, і область для локальних змінних зберігається), і відбувається зв’язування this.
jQuery пов'язує це
Контексти виконання утворюють логічний стек. Результат полягає в тому, що контексти, розташовані глибше в стеку, мають доступ до попередніх змінних, але їх прив'язки, можливо, були змінені. Кожен раз, коли jQuery викликає функцію зворотного дзвінка, вона змінює цю прив'язку за допомогою applyMDN .
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є ітератором, який використовується для позиції в масиві поточного елемента.