首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Errors: Not a function

信息

代码语言:javascript
复制
TypeError: "x" is not a function

错误类型

TypeError.

什么地方出了错?

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

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

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

  • 使用ArrayTypedArray对象时:
    • Array.prototype.every(), Array.prototype.some(), Array.prototype.forEach(), Array.prototype.map(), Array.prototype.filter(), Array.prototype.reduce(), Array.prototype.reduceRight(), Array.prototype.find()
  • 使用MapSet对象时:
    • Map.prototype.forEach()Set.prototype.forEach()

示例

函数名称中的拼写错误

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

代码语言:javascript
复制
var x = document.getElementByID('foo');
// TypeError: document.getElementByID is not a function

正确的函数名称是getElementById

代码语言:javascript
复制
var x = document.getElementById('foo');

函数调用错误的对象

对于某些方法,你必须提供一个(回调)函数,它只能在特定的对象上工作。在这个例子中,Array.prototype.map()使用只能用于对象Array

代码语言:javascript
复制
var obj = {a: 13, b: 37, c: 42};

obj.map(function(num) {
  return num * 2;
});

// TypeError: obj.map is not a function

改用数组:

代码语言:javascript
复制
var numbers = [1, 4, 9];

numbers.map(function(num) { 
  return num * 2; 
}); 

// Array [2, 8, 18]

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

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

代码语言:javascript
复制
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

改为使用其他属性名称:

代码语言:javascript
复制
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' }

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com