| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Errors/Not_a_function | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
TypeError: Object doesn't support property or method {x} (Edge)
TypeError: "x" is not a function
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 :
Pour les objets Array ou TypedArray, voici les fonctions qui utilisent une fonction en argument :
Dans ce cas, qui arrive bien trop souvent, il y a une faute d'orthographe dans le nom de la fonction utilise :
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) :
var x = document.getElementById("toto");
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.
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 :
var nombres = [1, 4, 9];
nombres.map(function (num) {
return num * 2;
});
// Array [ 2, 8, 18 ]
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 :
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 :
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" }
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 :
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 * :
var seize = 2 * (3 + 5);
console.log("2 x (3 + 5) is " + String(seize));
//2 x (3 + 5) is 16
Assurez-vous d'importer le module correctement. Si par exemple, on dispose d'une bibliothque helpers.js avec le code suivant :
let helpers = function () {};
helpers.log = function (msg) {
console.log(msg);
};
export default helpers;
Pour l'importer ct application, on crira :
import helpers from "./helpers";
Cette page a t modifie le 24 juin 2025 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |