2013-02-10 63 views
2

我下面谷歌瀏覽器的擴展開發指南在這裏: http://developer.chrome.com/extensions/getstarted.html爲什麼bind(this)在這一行中是必需的?

在這個文件的第41行:http://sprunge.us/NFjZ

​​3210

,他們用這樣 this.showPhotos_.bind綁定功能(這) ;如果沒有這種綁定,示例擴展將不起作用。我在showPhotos_方法中測試並驗證「this」只是kittenGenerator對象。因爲showPhotos_只是該對象的一個​​方法,所以這應該隱式地完成,那爲什麼這個綁定是必要的呢?


請注意,由於popup.js文件中的拼寫錯誤,Google的示例將不起作用。 要更正它,請將「kittensOnFlickr_」更改爲「searchOnFlickr_」。

+0

也許該方法稍後移到其他地方? – 2013-02-10 19:28:31

+0

@JanDvorak不,不是。 – qed 2013-02-10 19:30:23

+0

因爲它是一個事件處理程序,如果沒有這個綁定,你會失去處理程序的範圍。而'這個'會叫'窗口' – YoannM 2013-02-10 19:31:40

回答

4

當從req.onload調用時沒有綁定showPhotos_this將是req而不是kittenGenerator

+0

我該如何證明這一點?謝謝! – qed 2013-02-10 19:37:22

+0

如果沒有綁定,'showPhotos_'中的警報就會顯示'[object XMLHttpRequest]' – Musa 2013-02-10 19:40:40

+0

不幸的是,它根本沒有提醒。 http://sprunge.us/RMGN – qed 2013-02-10 19:44:37

相關問題