From bf8e099b9c8b3c60d60b3712b4fc97b052c39887 Mon Sep 17 00:00:00 2001 From: julieng Date: Tue, 3 Aug 2021 08:03:23 +0200 Subject: convert content to md --- .../reference/errors/not_a_function/index.md | 130 +++++++++++---------- 1 file changed, 68 insertions(+), 62 deletions(-) (limited to 'files/fr/web/javascript/reference/errors/not_a_function') diff --git a/files/fr/web/javascript/reference/errors/not_a_function/index.md b/files/fr/web/javascript/reference/errors/not_a_function/index.md index 8675a249ae..e6b948eebe 100644 --- a/files/fr/web/javascript/reference/errors/not_a_function/index.md +++ b/files/fr/web/javascript/reference/errors/not_a_function/index.md @@ -8,82 +8,82 @@ tags: translation_of: Web/JavaScript/Reference/Errors/Not_a_function original_slug: Web/JavaScript/Reference/Erreurs/Not_a_function --- -
{{jsSidebar("Errors")}}
+{{jsSidebar("Errors")}} -

Message

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

Type d'erreur

+## Type d'erreur -

{{jsxref("TypeError")}}.

+{{jsxref("TypeError")}}. -

Quel est le problème ?

+## Quel est le problème ? -

Une valeur a été utilisée 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 reçu des valeurs d'un autre type.

+Une valeur a été utilisée 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 reçu 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 méthode est invoquée ne possède pas cette fonction (par exemple, les objets Array possèdent une fonction map() mais d'autres objets ne l'ont pas).

+Il est possible qu'il y ait une coquille dans le nom de la fonction. Peut être que l'objet sur lequel la méthode est invoquée ne possède pas cette fonction (par exemple, les objets `Array` possèdent 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) passée en argument :

+Il existe de nombreuses fonctions natives qui fonctionnent à l'aide d'une fonction (_callback_) passée en argument : - +- Pour les objets {{jsxref("Array")}} ou {{jsxref("TypedArray")}}, voici les fonctions qui utilisent une fonction en argument : -

Exemples

+ - {{jsxref("Array.prototype.every()")}}, {{jsxref("Array.prototype.some()")}}, {{jsxref("Array.prototype.forEach()")}}, {{jsxref("Array.prototype.map()")}}, {{jsxref("Array.prototype.filter()")}},  {{jsxref("Array.prototype.reduce()")}}, {{jsxref("Array.prototype.reduceRight()")}}, {{jsxref("Array.prototype.find()")}} -

Une coquille dans le nom de la fonction

+- Pour les objets {{jsxref("Map")}} et {{jsxref("Set")}}, voici les méthodes concernées : -

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

+ - {{jsxref("Map.prototype.forEach()")}} and {{jsxref("Set.prototype.forEach()")}} -
var x = document.getElementByID("toto");
+## 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 utilisée :
+
+```js example-bad
+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) :

+Le nom de la fonction est (dans cet exemple) `getElementById` (attention à la casse pour les noms en JavaScript) : -
var x = document.getElementById("toto");
-
+```js example-good +var x = document.getElementById("toto"); +``` -

Appeler une fonction sur le mauvais objet

+### Appeler une fonction sur le mauvais objet -

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

+Certaines méthodes ne fonctionnent que pour certains types d'objet et utilisent une fonction en argument. Ainsi, dans cet exemple, on utilise {{jsxref("Array.prototype.map()")}} qui ne fonctionne que sur les objets {{jsxref("Array")}}. -
var obj = { a: 13, b: 37, c: 42 };
+```js example-bad
+var obj = { a: 13, b: 37, c: 42 };
 
 obj.map(function(num) {
   return num * 2;
 });
 
-// TypeError: obj.map is not a function
+// TypeError: obj.map is not a function +``` -

Il faudra utiliser un tableau à la place :

+Il faudra utiliser un tableau à la place : -
var nombres = [1, 4, 9];
+```js example-good
+var nombres = [1, 4, 9];
 
 nombres.map(function(num) {
   return num * 2;
 });
 
 // Array [ 2, 8, 18 ]
-
+``` -

Utiliser le même nom pour une méthode et une propriété

+### Utiliser le même nom pour une méthode et une propriété -

Lorsqu'on écrit une classe, on peut malheureusement utiliser le même nom pour une propriété et une méthode. Lorsqu'on appellera la fonction, celle-ci aura été remplacée par la propriété et cela déclenchera une erreur :

+Lorsqu'on écrit une classe, on peut malheureusement utiliser le même nom pour une propriété et une méthode. Lorsqu'on appellera la fonction, celle-ci aura été remplacée par la propriété et cela déclenchera une erreur : -
var Chien = function () {
+```js example-bad
+var Chien = function () {
  this.age = 11;
  this.couleur = "noir";
  this.nom = "Ralph";
@@ -98,11 +98,12 @@ Chien.prototype.nom = function(nom) {
 
 var monNouveauChien = new Chien();
 monNouveauChien.nom("Cassidy"); // Uncaught TypeError: monNouveauChien.nom is not a function
-
+``` -

Pour résoudre le problème, on utilisera deux noms distincts pour la propriété et la méthode :

+Pour résoudre le problème, on utilisera deux noms distincts pour la propriété et la méthode : -
var Chien = function () {
+```js example-good
+var Chien = function () {
  this.age = 11;
  this.couleur = "noir";
  this.nomChien = "Ralph";
@@ -117,40 +118,45 @@ Chien.prototype.nom = function(nom) {
 
 var monNouveauChien = new Chien();
 monNouveauChien.nom("Cassidy"); // Chien { age: 11, couleur: "noir", nomChien: "Cassidy" }
-
+``` -

Utiliser des parenthèses pour la multiplication

+### Utiliser des parenthèses pour la multiplication -

En notation mathématique, 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 préciser l'opérateur de multiplication :

+En notation mathématique, 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 préciser l'opérateur de multiplication : -
var seize = 2(3 + 5);
+```js example-bad
+var seize = 2(3 + 5);
 console.log('2 x (3 + 5) vaut ' + String(seize));
-// Uncaught TypeError: 2 is not a function
+// Uncaught TypeError: 2 is not a function +``` -

Pour corriger, il suffit d'ajouter l'opérateur * :

+Pour corriger, il suffit d'ajouter l'opérateur `*` : -
var seize = 2 * (3 + 5);
+```js example-good
+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

+### Importer un module exporté correctement -

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

+Assurez-vous d'importer le module correctement. Si par exemple, on dispose d'une bibliothèque `helpers.js` avec le code suivant : -
let helpers = function () { };
+```js
+let helpers = function () { };
 helpers.log = function(msg) {
   console.log(msg);
 };
 
-export default helpers;
+export default helpers; +``` -

Pour l'importer côté application, on écrira :

+Pour l'importer côté application, on écrira : -
import helpers from './helpers'
+```js +import helpers from './helpers' +``` -

Voir aussi

+## Voir aussi - +- [Les fonctions](/fr/docs/Web/JavaScript/Reference/Fonctions) -- cgit v1.2.3-54-g00ecf