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来确定。有人可以解释这个吗?

+0

此链接可能会有所帮助 - http://bonsaiden.github.com/JavaScript-Garden/#function.this – 2012-03-01 08:46:30

您的示例中的事件由jQuery处理,而不是由JavaScript引擎处理。在Javascript中,可以在调用函数时设置“this”引用的内容。 jQuery在一个函数上使用.apply方法来做到这一点。所以当jQuery解释选择器时,它会为每个匹配的对象调用你的处理函数,并为那个匹配的对象设置'this'。例如。

var handler = function() { alert(this.id) } 

handler.apply(document.getElementById('something')); 

在上面的例子中,“这个”内部处理程序将参考的DOM元素用的“东西”的ID,并警告将显示文本“东西”。

+0

好的,所以从代码本身来看并不清楚。相反,它需要知道jQuery如何调用“事件处理程序”。那是对的吗?这意味着,一般来说,你不能确定从反思中得知'this'引用在传递给外部库的匿名函数体内是什么? – 2012-03-01 09:06:34

+0

@StephenEllis是的,你需要阅读库文档。 – kirilloid 2012-03-01 09:41:54

在你的例子中,匿名函数是一个事件处理程序。关键字this将引用触发该事件的任何元素。在这种情况下,这只能是id为myimage的元素,因为事件仅与该元素绑定。情况并非一定如此;考虑以下变体:

$('img').mouseenter(function() { 
    $(this).effect('bounce',500); 
});​ 

该代码将鼠标输入事件处理程序附加到文档中的所有图像标记。因此this可能会引用文档中的任何图像;它取决于哪个图像被鼠标光标“触摸”。