Errors: Not a function
错误:不是函数
信息
TypeError: "x" is not a function
错误类型
TypeError
.
什么地方出了错?
它试图从一个函数中调用一个值,但该值实际上并不是一个函数。有些代码希望你提供一个函数,但是这没有发生。
也许在函数名称中存在拼写错误?也许你正在调用方法的对象没有这个函数?例如,JavaScript对象没有map
函数,但是JavaScript Array对象具有。
有许多内置函数需要(回调)函数。您必须提供一个函数才能使这些方法正常工作:
- 使用
Array
或TypedArray
对象时:
示例
函数名称中的拼写错误
在这种情况下,这种情况经常发生,方法名称中会出现拼写错误:
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' }