2012-03-01 51 views
0

我正在深入研究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

回答

3

您的示例中的事件由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

0

在你的例子中,匿名函數是一個事件處理程序。關鍵字this將引用觸發該事件的任何元素。在這種情況下,這隻能是id爲myimage的元素,因爲事件僅與該元素綁定。情況並非一定如此;考慮以下變體:

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

該代碼將鼠標輸入事件處理程序附加到文檔中的所有圖像標記。因此this可能會引用文檔中的任何圖像;它取決於哪個圖像被鼠標光標「觸摸」。

相關問題