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.
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis août 2016.
La propriété de donnée name d'une instance de Function indique le nom de la fonction tel que défini lors de sa création, ou peut être soit anonymous soit '' (une chaîne vide) pour les fonctions créées anonymement.
Une chaîne de caractères.
| Écrivable | Non |
| Énumérable | Non |
| Configurable | Oui |
Note : Dans les implémentations non-standards antérieures à ES2015, l'attribut configurable valait false.
La propriété name d'une fonction peut être utilisée pour identifier la fonction dans les outils de débogage ou les messages d'erreur. Elle n'a aucune signification sémantique pour le langage lui-même.
La propriété name est en lecture seule et ne peut pas être modifiée avec l'opérateur d'affectation :
Pour la modifier, utilisez Object.defineProperty().
La propriété name est généralement déduite de la façon dont la fonction est définie. Dans les sections suivantes, nous décrirons les différentes manières dont elle peut être déduite.
La propriété name retourne le nom d'une déclaration de fonction.
Une déclaration export default exporte la fonction comme une déclaration plutôt qu'une expression. Si la déclaration est anonyme, le nom est "default".
Les fonctions créées avec le constructeur Function() ont pour nom "anonymous".
Si l'expression de fonction est nommée, ce nom est utilisé comme propriété name.
Les expressions de fonction anonymes, créées soit avec le mot-clé function, soit avec la syntaxe des fonctions fléchées, ont "" (une chaîne de caractères vide) comme nom par défaut.
Cependant, de tels cas sont rares — généralement, afin d'appeler la fonction ailleurs, l'expression de fonction est associée à un identifiant. Le nom d'une expression de fonction anonyme peut être déduit dans certains contextes syntaxiques, y compris : déclaration de variable et méthode, initialiseur et valeur par défaut.
Un cas pratique où le nom ne peut pas être déduit est une fonction retournée par une autre fonction :
Les variables et les méthodes peuvent déduire le nom d'une fonction anonyme à partir de leur position syntaxique.
Il en va de même pour l'affectation :
Les fonctions placées dans des initialiseurs (valeurs par défaut) de la décomposition, des paramètres par défaut, des champs de classe, etc., héritent du nom de l'identifiant auquel elles sont liées.
Function.prototype.bind() produit une fonction dont le nom est la chaîne "bound " suivie du nom de la fonction liée.
Lorsque vous utilisez les propriétés d'accesseur get et set, "get" ou "set" apparaît dans le nom de la fonction.
Le nom d'une classe suit le même algorithme que les déclarations et expressions de fonction.
Attention : JavaScript ne définira la propriété name d'une fonction que si une fonction n'a pas de propriété propre appelée name. Cependant, les membres statiques des classes seront définis comme des propriétés propres de la fonction constructeur de la classe, et empêcheront donc l'application du name intégré. Voir l'exemple ci-dessous.
Si un Symbol est utilisé comme nom de fonction et que le symbole possède une description, le nom de la méthode sera cette description entre crochets.
Les champs privés et les méthodes privées ont le dièse (#) comme partie de leur nom.
Vous pouvez utiliser obj.constructor.name pour vérifier la « classe » d'un objet.
Cependant, comme les membres statiques deviennent des propriétés propres de la classe, on ne peut pas obtenir le nom de la classe pour pratiquement toute classe ayant une propriété de méthode statique name() :
Avec une méthode static name(), Toto.name ne contient plus le nom réel de la classe mais une référence à l'objet fonction name(). Essayer d'obtenir la classe de totoInstance via totoInstance.constructor.name ne donnera pas du tout le nom de la classe, mais une référence à la méthode statique de la classe. Exemple :
En raison de l'existence de champs statiques, name peut aussi ne pas être une fonction.
Si une classe possède une propriété statique appelée name, elle deviendra également écrivable. La définition intégrée en l'absence d'une définition statique personnalisée est en lecture seule :
Par conséquent, vous ne pouvez pas compter sur la propriété intégrée name pour contenir toujours le nom d'une classe.
Attention : Faites attention lors de l'utilisation de la propriété name avec des transformations du code source, telles que celles effectuées par des compresseurs (minifieurs) ou des ofuscateurs JavaScript. Ces outils sont souvent utilisés dans une chaîne de construction JavaScript pour réduire la taille d'un programme avant son déploiement en production. De telles transformations modifient souvent le nom d'une fonction lors de la construction.
Le code source tel que :
peut être compressé en :
Dans la version non compressée, le programme exécute la branche vraie et affiche « 'toto' est une instance de 'Toto' » — alors que dans la version compressée, il se comporte différemment et exécute la branche else. Si vous dépendez de la propriété name, comme dans l'exemple ci‑dessus, assurez‑vous que votre chaîne de construction ne modifie pas les noms de fonctions, ou ne supposez pas qu'une fonction ait un nom particulier.
| ECMAScript® 2027 Language Specification # sec-function-instances-name |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 25 févr. 2026 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.