Fehlermeldung

TypeError: "x" is not a function

Fehlertyp

TypeError.

Was ist falsch gelaufen?

Es wird versucht einen Wert wie eine Funktion aufzurufen, aber der Wert ist eigentlich keine Funktion. Manchmal erwartet das Programm eine Funktion erstellen, was nicht der fall ist.

Vielleicht ist ein Tippfehler inm Funktionsnamen. Manchmal besitzt das aufgerufene Objekt eine Funktion nicht. Zum Beispiel besitzen JavaScript Objekte keine map Funktion, aber JavaScript Arrays haben diese Funktion.

Es gibt viele eingebaute Funktionen, die eine (Callback-) Funktion benötigen. Es muss eine Funktion bereitstellt werden, damit diese Methoden normal funktionieren:

Beispiele

Ein Schreibfehler im Funktionsnamen

In diesem Fall passiert es viel zu oft, dass im Name ein Schreibfehler enthält:

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

Der korrekte Funktionsname ist getElementById:

var x = document.getElementById('foo');

Funktion wird auf dem falschen Objekt aufgerufen

Für bestimmte Methoden musst eine (callback) Funktion benutzt werden, die nur bei spezifizierten Objekten funktionieren. In diesem Beispiel wird Array.prototype.map() verwendet, welche nur mit Array Objekten funktioniert.

var obj = {a: 13, b: 37, c: 42};

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

// TypeError: "x" is not a function

Stattdessen muss ein Array verwendet werden:

var numbers = [1, 4, 9];

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

// Array [2, 8, 18]

Funktionen teilen einen Namen mit einer existierenden Eigenschaft

Manchmal, wenn eine Klasse geschrieben wird, haben eine Eigenschaft und eine Funktion den gleichen Namen. Nach dem Aufruf der Funktion denkt der Compiler, dass die Funktion nicht mehr existiert.

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

Stattdessen kann ein anderer Eigenschaftsname benutzt werden:

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

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
Mitwirkende an dieser Seite: schlagi123, fire-stone
Zuletzt aktualisiert von: schlagi123,