this
是元素,$(this)
是使用该元素构建的 jQuery 对象
$(".class").each(function(){
var HTMLElement = this;
var jQueryObject = $(this);
});
深入了解
this
MDN 包含在执行上下文中
范围指当前Execution ContextECMA。为了理解 this
,了解 JavaScript 中执行上下文的操作方式非常重要。
执行上下文绑定 this
当控制进入执行上下文(代码在该作用域中被执行)时,变量的环境被设置(词法和变量环境 - 本质上这设置了一个区域,使已经可访问的变量进入,以及存储局部变量的区域),并且发生了 this
的绑定。
jQuery 绑定 this
执行上下文形成了一个逻辑堆栈。结果是,堆栈中更深的上下文可以访问先前的变量,但它们的绑定可能已被更改。 每次jQuery调用回调函数时,它都使用apply
MDN来改变this绑定。
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对象都包含一个元素数组,其中的元素与用于实例化jQuery对象的
selectorjQuery API相匹配。
$(selector)
调用 jQuery 函数(请记住,$
是对 jQuery
的引用,代码:window.jQuery = window.$ = jQuery;
)。在内部,jQuery 函数实例化一个函数对象。因此,虽然可能不是立即显而易见的,但使用 $()
内部使用的是 new jQuery()
。构建这个 jQuery 对象的一部分是查找选择器的所有匹配项。构造函数还将接受 html 字符串和元素。当您将 this
传递给 jQuery 构造函数时,您正在传递当前元素以构建 jQuery 对象。然后,jQuery 对象包含与选择器匹配的 DOM 元素的类似数组的结构(或仅在 this
的情况下包含单个元素)。
一旦构造了 jQuery 对象,就会暴露出 jQuery API。当调用 jQuery api 函数时,它将在内部迭代这个类似数组的结构。对于数组中的每个项目,它都会调用 api 的回调函数,并将回调的 this
绑定到当前元素。在上面的代码片段中可以看到这个调用,其中 obj
是类似数组的结构,而 i
是用于当前元素在数组中的位置的迭代器。