Цей переклад в процесі.

Повідомлення

TypeError: "x" не є функцією

Тип помилки

TypeError.

Що пішло не так?

Була спроба викликати значення з функції, але значення насправді не є функцією. Деякий код очікує, що ви надішлете функцію, але це не відбулося.

Можило в назві функції є опечатка? Можливо метод, що викликаєтся на об'єкті не має цієї функції? Наприклад, об'єкти JavaScript не мають функції map , але об'єкт масиву JavaScript має.

Є багато вбудованих функцій, які потребують функцій зворотнього виклику. Вам доведеться надати функцію, щоб ці методи працювали належним чином:

Приклади

Помилка в назві фунції

В цьому випадку, що трапляється занадто часто, в назві методу є помилка:

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' }

Дивись також

Мітки документа й учасники

 Зробили внесок у цю сторінку: ivaskonyan
 Востаннє оновлена: ivaskonyan,