【发布时间】:2015-12-05 19:13:29
【问题描述】:
据我了解,函数内部的this 指的是调用该函数的对象。所以,例如,在
myObj = { name : "Charlie", getType : function() { return typeof(this); } };
console.log(myObj.getType());
调用函数getType的对象是myObj,因此typeof(this)是typeof(myObj)。
那么,为什么我总是在 jQuery 函数中看到$(this)?例如,在
$('.not-taller-than-50-pixels').each(function()
{
if ($(this).height() > 50) $(this).height(50);
});
$('.not-taller-than-50-pixels') 不返回一个 jQuery 对象数组,所以在 each 内部调用函数是一个 jQuery 对象,所以 this 将引用该 jQuery 对象,我可以简单地写 if (this.height() > 50) this.height(50); ?? ?
【问题讨论】:
-
不,
this将是当前被迭代的元素,它不是 jQuery 对象,它是 jQuery 对象中的元素。 “类数组”对象中的单个值。与使用[1,2,3].forEach时获取数组值的方式相同,例如1、2和3,而不是包装在另一个数组中的值,例如[1]、[2]和[3]. -
Kevin Bacon,到底是什么类型的元素?
-
这个问题没有显示任何研究工作。
-
在您的示例中,它是一个 dom 节点,与使用
document.getElementById('foo')获得的元素类型相同。但是请注意,$().each 可以用于其他类型的集合,例如原生数组或其他类似数组的对象,因此它可能并不总是一个 dom 节点。 -
.each()是 jQuery 的方法,传递的函数不是。此外,在某些情况下,this指向另一个对象,而不是调用函数的对象。例如在做myObj.getType.bind(window)之后,this永久引用window对象。
标签: javascript jquery scope closures this