[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Errors/Not_a_function [Back]  [Original]

TypeError: "x" is not a function - JavaScript | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

TypeError: "x" is not a function

Message

TypeError: Object doesn't support property or method {x} (Edge)
TypeError: "x" is not a function

Dans cet article

Type d'erreur

TypeError.

Quel est le problme ?

Une valeur a t utilise pour un appel de fonction alors que cette valeur n'est pas une fonction. Autrement dit, un fragment de code attendait une fonction mais a reu des valeurs d'un autre type.

Il est possible qu'il y ait une coquille dans le nom de la fonction. Peut tre que l'objet sur lequel la mthode est invoque ne possde pas cette fonction (par exemple, les objets Array possdent une fonction map() mais d'autres objets ne l'ont pas).

Il existe de nombreuses fonctions natives qui fonctionnent l'aide d'une fonction (callback) passe en argument :

Exemples

Une coquille dans le nom de la fonction

Dans ce cas, qui arrive bien trop souvent, il y a une faute d'orthographe dans le nom de la fonction utilise :

js
var x = document.getElementByID("toto");
// TypeError: document.getElementByID is not a function

Le nom de la fonction est (dans cet exemple) getElementById (attention la casse pour les noms en JavaScript) :

js
var x = document.getElementById("toto");

Appeler une fonction sur le mauvais objet

Certaines mthodes ne fonctionnent que pour certains types d'objet et utilisent une fonction en argument. Ainsi, dans cet exemple, on utilise Array.prototype.map() qui ne fonctionne que sur les objets Array.

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

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

// TypeError: obj.map is not a function

Il faudra utiliser un tableau la place :

js
var nombres = [1, 4, 9];

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

// Array [ 2, 8, 18 ]

Utiliser le mme nom pour une mthode et une proprit

Lorsqu'on crit une classe, on peut malheureusement utiliser le mme nom pour une proprit et une mthode. Lorsqu'on appellera la fonction, celle-ci aura t remplace par la proprit et cela dclenchera une erreur :

js
var Chien = function () {
  this.age = 11;
  this.couleur = "noir";
  this.nom = "Ralph";
  return this;
};

Chien.prototype.nom = function (nom) {
  this.nom = nom;
  return this;
};

var monNouveauChien = new Chien();
monNouveauChien.nom("Cassidy"); // Uncaught TypeError: monNouveauChien.nom is not a function

Pour rsoudre le problme, on utilisera deux noms distincts pour la proprit et la mthode :

js
var Chien = function () {
  this.age = 11;
  this.couleur = "noir";
  this.nomChien = "Ralph";
  return this;
};

Chien.prototype.nom = function (nom) {
  this.nomChien = nom;
  return this;
};

var monNouveauChien = new Chien();
monNouveauChien.nom("Cassidy"); // Chien { age: 11, couleur: "noir", nomChien: "Cassidy" }

Utiliser des parenthses pour la multiplication

En notation mathmatique, on peut crire 2(3+5) pour indiquer qu'on souhaite multiplier 2 par 3 + 5. Toutefois, une telle criture n'est pas valide en JavaScript car il faut prciser l'oprateur de multiplication :

js
var seize = 2(3 + 5);
console.log("2 x (3 + 5) vaut " + String(seize));
// Uncaught TypeError: 2 is not a function

Pour corriger, il suffit d'ajouter l'oprateur * :

js
var seize = 2 * (3 + 5);
console.log("2 x (3 + 5) is " + String(seize));
//2 x (3 + 5) is 16

Importer un module export correctement

Assurez-vous d'importer le module correctement. Si par exemple, on dispose d'une bibliothque helpers.js avec le code suivant :

js
let helpers = function () {};
helpers.log = function (msg) {
  console.log(msg);
};

export default helpers;

Pour l'importer ct application, on crira :

js
import helpers from "./helpers";

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page