我不得不爲一個我上傳的網站修復megamenu系統,而且我遇到了一個bug。javascript:在對象字面量函數中使用'this'給出一個錯誤
DOM準備就緒(包含jQuery)後,運行megamenu的渲染函數。在這裏有一個監聽器被添加到resize來重新運行這個函數,重新渲染代碼。然而,我得到的JavaScript錯誤,認爲這個渲染函數,當從對象內部調用時,實際上是一個窗口的函數,所以我得到「Uncaught TypeError:對象[對象DOMWindow]沒有方法'渲染'」。
但是函數仍然運行!
這裏是代碼的簡單快照:
var jkmegamenu=
{
...
render:function($)
{
...
$(window).bind("resize", function()
{
this.render($);
}
}
}
現在,我已經試過jkmegamenu.render($)(不知道美元是什麼,有無因jQuery的原理我想象),並且我已經試圖將自己定義爲self:這個但是會發生同樣的錯誤。它是一個相當大的文件,我很忙,所以我只考慮重新編碼一個合適的jQuery對象(例如http://www.phpied.com/3-ways-to-define-a-javascript-class/),如果這是唯一的其他選項,否則有人知道一個快速修復?
該網站是kent.ac.uk,你將能夠看到彈出的錯誤,特別是在調整大小。
JavaScript是**不**損壞。它的作用*不同於你以前的習慣,但那不是*破碎*。 – 2011-05-04 12:57:59
我承認,破碎可能有點嚴厲,但很多人認爲JavaScript不應該這樣。如果您閱讀'Javascript:The Good Parts',道格拉斯克羅克福德(和其他一些人一樣)提出了同樣的要求。我會改變我的措辭,但如果它錯誤的人:) – Igor 2011-05-04 13:01:46
Crockford提出了很多的要求。其中一些非常好。有些不是。我總是說讀克羅克福德很重要 - 然後得出你自己的結論。 ;-)我非常喜歡JavaScript提供的自由和靈活性。 – 2011-05-04 13:04:09