2017-06-29 116 views
0

我有一個小負載腳本設置一些課程,看起來像這樣:爲什麼這是jQuery事件處理程序中的窗口對象?

function frameIt() { 
    console.log("called frameit") 
    $('img').on('load',() => { 
    console.log("running listener") 
    debugger; 
    $(this).addClass("tasty"); 
    }); 
    console.log("set listener") 
} 

我的問題是,$(this)總是被設置爲在上下文中window即使this被加載img標籤Chrome的調試器顯示。任何想法爲什麼發生這種情況?這裏是一個Chrome的調試器的截圖: enter image description here

回答

6

這是因爲箭頭功能不綁定自己的this背景 - 他們採取封閉範圍的this值。由於jQuery在內部綁定事件處理程序的this,但this不能綁定到箭頭函數,所以this參考window,因爲它是封閉範圍的this值。改用常規功能。

+1

但是...'()=>'是新的'function' !!?! – mhodges

+0

顯然不是。感謝您指出了這一點。它希望我等7分鐘,直到我能接受答案。 –

2
$('img').on('load', function() { 
    console.log("running listener") 
    debugger; 
    $(this).addClass("tasty"); 
}); 
+0

歡迎來到Stack Overflow!儘管這段代碼可以解決這個問題,但[包括一個解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! –

相關問題