https://stackoverflow.com/questions/32751209/jasmine-typeerror-is-not-a-function
信息
TypeError: "x" is not a function
錯誤類型
哪里出錯了?
問題出在你試圖去調用一個像函數一樣的值,但是該值實際上不是函數,有時候你的代碼需要調用一些函數,但是那種值並不能當作函數來被調用。
也許函數名稱上有錯別字? 也許你正在調用Object對象沒有這個方法? 例如,在JavaScript中單純的對象(Object)沒有map函數,但是JavaScript數組(Array)對象卻有這個函數。
在比如,在JavaScript中很多原生對象的內置方法需要你提供一個(回調)函數。 所以你必須提供一個函數,以使這些方法正常工作:
- 當你在使用
Array或TypedArray對象時: - 當你在使用
Map和Set對象時:
例子
函數的名稱錯誤
函數的名稱拼寫錯誤,這種情況是經常發生的:
var x = document.getElementByID("foo"); // TypeError: document.getElementByID is not a function
正確的方法名應該是 getElementById:
var x = document.getElementById("foo");
調用Object類型中不存在的方法
對於某些特殊的方法,它只屬於某些特定的原生對象中,你必須提供一個回調函數才能正常運行。例如:這里調用了一個 Array.prototype.map() 方法,但是這方法只能被 Array 對象所調用。
var obj = { a: 13, b: 37, c: 42 }; obj.map(function(num) { return num * 2; }); // TypeError: obj.map is not a function
正確的做法,使用一個數組來代替:
var numbers = [1, 4, 9]; numbers.map(function(num) { return num * 2; }); // Array [ 2, 8, 18 ]
