在线文档教程
JavaScript
错误 | Errors

Errors: Not a function

错误:不是函数

信息

TypeError: "x" is not a function

错误类型

TypeError.

什么地方出了错?

它试图从一个函数中调用一个值,但该值实际上并不是一个函数。有些代码希望你提供一个函数,但是这没有发生。

也许在函数名称中存在拼写错误?也许你正在调用方法的对象没有这个函数?例如,JavaScript对象没有map函数,但是JavaScript Array对象具有。

有许多内置函数需要(回调)函数。您必须提供一个函数才能使这些方法正常工作:

  • 使用ArrayTypedArray对象时:

示例

函数名称中的拼写错误

在这种情况下,这种情况经常发生,方法名称中会出现拼写错误:

var x = document.getElementByID('foo' // TypeError: document.getElementByID is not a function

正确的函数名称是getElementById

var x = document.getElementById('foo'

函数调用错误的对象

对于某些方法,你必须提供一个(回调)函数,它只能在特定的对象上工作。在这个例子中,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]

函数与预先存在的属性共享一个名称

有时候在创建一个类时,可能会有一个属性和一个具有相同名称的函数。在调用该函数时,编译器认为函数不存在。

var Dog = function () { this.age = 11; this.color = "black";  this.name = "Ralph"; return this; } Dog.prototype.name = function(name) { this.name = name; return this; } var myNewDog = new Dog( myNewDog.name("Cassidy" //Uncaught TypeError: myNewDog.name is not a function

改为使用其他属性名称:

var Dog = function () { this.age = 11; this.color = "black";  this.dogName = "Ralph"; //Using this.dogName instead of .name return this; } Dog.prototype.name = function(name) { this.dogName = name; return this; } var myNewDog = new Dog( myNewDog.name("Cassidy" //Dog { age: 11, color: 'black', dogName: 'Cassidy' }