Javascript'this'reference - 有人可以解释一下这个简单的例子吗?
我正在深入研究JavaScript,并且我正在努力在实际代码中理解“this”引用。有人可以在下面的例子中解释'this'参考吗?Javascript'this'reference - 有人可以解释一下这个简单的例子吗?
$('#myimage').mouseenter(function() {
$(this).effect('bounce',500);
});
我明白'this'这个关键字指的是任何'拥有'的声明函数。这意味着,在下面的代码中,“这个”将是指被由objectFunction函数返回的对象:
var objectFunction = function()
{
var thing = function() { alert(this.toString()); };
return { thing : thing };
}
objectFunction().thing();
现在,在所述第一代码中,“这个”关键字实际上指的是DOM元素' MYIMAGE”。我无法解决的是如何通过检查JavaScript来确定。有人可以解释这个吗?
您的示例中的事件由jQuery处理,而不是由JavaScript引擎处理。在Javascript中,可以在调用函数时设置“this”引用的内容。 jQuery在一个函数上使用.apply方法来做到这一点。所以当jQuery解释选择器时,它会为每个匹配的对象调用你的处理函数,并为那个匹配的对象设置'this'。例如。
var handler = function() { alert(this.id) }
handler.apply(document.getElementById('something'));
在上面的例子中,“这个”内部处理程序将参考的DOM元素用的“东西”的ID,并警告将显示文本“东西”。
好的,所以从代码本身来看并不清楚。相反,它需要知道jQuery如何调用“事件处理程序”。那是对的吗?这意味着,一般来说,你不能确定从反思中得知'this'引用在传递给外部库的匿名函数体内是什么? – 2012-03-01 09:06:34
@StephenEllis是的,你需要阅读库文档。 – kirilloid 2012-03-01 09:41:54
在你的例子中,匿名函数是一个事件处理程序。关键字this
将引用触发该事件的任何元素。在这种情况下,这只能是id为myimage
的元素,因为事件仅与该元素绑定。情况并非一定如此;考虑以下变体:
$('img').mouseenter(function() {
$(this).effect('bounce',500);
});
该代码将鼠标输入事件处理程序附加到文档中的所有图像标记。因此this
可能会引用文档中的任何图像;它取决于哪个图像被鼠标光标“触摸”。
此链接可能会有所帮助 - http://bonsaiden.github.com/JavaScript-Garden/#function.this – 2012-03-01 08:46:30