TypeError: "x" is not a function

信息

TypeError: "x" is not a function

错误类型

TypeError

哪里出错了?

问题出在你试图去调用一个像函数一样的值,但是该值实际上不是函数,有时候你的代码需要调用一些函数,但是那种值并不能当作函数来被调用。

也许函数名称上有错别字? 也许你正在调用Object对象没有这个方法? 例如,在JavaScript中单纯的对象(Object)没有map函数,但是JavaScript数组(Array)对象却有这个函数。

在比如,在JavaScript中很多原生对象的内置方法需要你提供一个(回调)函数。 所以你必须提供一个函数,以使这些方法正常工作:

例子

函数的名称错误

函数的名称拼写错误,这种情况是经常发生的:

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 ]

相关

文档标签和贡献者