2013-07-09 14 views
1

我有這個(很簡單)的代碼:簡單Array.prototype是給一個TypeError

Array.prototype.test = function(x) { alert(x) } 
[0].test('Hello, World!') 

然而,當我執行它,我得到這個:

TypeError: Cannot call method 'test' of undefined 

有什麼不對?

+0

(這是一個*非常*奇怪的錯誤,我花了一段時間調試,所以我決定在這裏發佈它以備將來參考,以便稍後幫助其他程序員) – Doorknob

+0

如果您更喜歡省略分號,那麼簡單永遠不要用'['或'('來開始一行,我通常只是做一些類似'; [0] .test(...)'的操作。 –

+0

不要忘記在方法賦值之後總是添加semis。 – dandavis

回答

5

我就遇到了這個這個奇怪的錯誤,我終於想通了,解決的辦法就是添加分號:

Array.prototype.test = function(x) { alert(x) }; 
[0].test('Hello, World!'); 

否則,它會被解析如下:

Array.prototype.test = function(x) { alert(x) }[0].test('Hello, World!') 

function(x) { alert(x) }[0]未定義,因爲函數對象沒有名爲0的屬性,所以它變成

Array.prototype.test = undefined.test('Hello, World!') 

然後,它試圖在undefined上調用test,這當然不能這樣做,所以會出現錯誤。

+1

有用的參考:http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion-asi – bfavaretto

+0

@bfavaretto哦,謝謝,我會最喜歡':)' – Doorknob

相關問題