信息
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 ]