我有這個(很簡單)的代碼:簡單Array.prototype是給一個TypeError
Array.prototype.test = function(x) { alert(x) }
[0].test('Hello, World!')
然而,當我執行它,我得到這個:
TypeError: Cannot call method 'test' of undefined
有什麼不對?
我有這個(很簡單)的代碼:簡單Array.prototype是給一個TypeError
Array.prototype.test = function(x) { alert(x) }
[0].test('Hello, World!')
然而,當我執行它,我得到這個:
TypeError: Cannot call method 'test' of undefined
有什麼不對?
我就遇到了這個這個奇怪的錯誤,我終於想通了,解決的辦法就是添加分號:
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
,這當然不能這樣做,所以會出現錯誤。
有用的參考:http://stackoverflow.com/questions/2846283/what-are-the-rules-for-javascripts-automatic-semicolon-insertion-asi – bfavaretto
@bfavaretto哦,謝謝,我會最喜歡':)' – Doorknob
(這是一個*非常*奇怪的錯誤,我花了一段時間調試,所以我決定在這裏發佈它以備將來參考,以便稍後幫助其他程序員) – Doorknob
如果您更喜歡省略分號,那麼簡單永遠不要用'['或'('來開始一行,我通常只是做一些類似'; [0] .test(...)'的操作。 –
不要忘記在方法賦值之後總是添加semis。 – dandavis