Function.name

La propriété function.name renvoie le nom de la fonction.

Attributs de Function.name
Écrivable Non
Énumérable Non
Configurable Oui

Note : Pour les implémentations non-standards avant ES6, l'attribut configurable valait false également.

Description

La propriété name renvoie le nom d'une fonction ou bien (pour les implémentations pré-ES6/2015) la chaîne vide dans le cas des fonctions anonymes :

function faireQqc() { }

console.log(faireQqc.name); // affiche "faireQqc"

Les fonctions créées avec la syntaxe new Function(...) ou  Function(...) voient leurs noms initialisés avec la chaîne de caractères vide. Dans les exemples suivants, on utilise des fonctions anonymes pour lesquelles  name renvoie la chaîne vide :

var f = function() { };
var objet = {
  uneMéthode: function() {}
};

console.log(f.name == ""); // true
console.log(objet.uneMéthode.name == ""); // true

Les moteurs implémentant les fonctions selon ES6 peuvent inférer le nom de la fonction anonyme grâce à sa position syntaxique. Ainsi :

var f = function() {};
console.log(f.name);  // 'f' avec ES6

On peut définir une fonction nommée avec une expression de fonction :

var objet = {
  uneMéthode: function objet_uneMéthode() {}
};
console.log(objet.uneMéthode.name); // affiche "objet_uneMéthode"

try { objet_uneMéthode} catch(e) { console.log(e); }
// ReferenceError: objet_uneMéthode n'est pas défini

Cette propriété n'est accessible qu'en lecture, on ne peut pas la changer :

var objet = {
  // anonyme
  uneMéthode: function() { }
};

objet.uneMéthode.name = "uneMéthode";
console.log(objet.uneMéthode.name); // chaîne vide, uneMéthode est anonyme

Pour la modifier de façon explicite, on peut en revanche utiliser Object.defineProperty().

Exemples

On peut utiliser obj.constructor.name pour consulter le prototype d'un objet :

function a() { }

var b = new a();
console.log(b.constructor.name); // Affichera "a"

Spécifications

Spécification Statut Commentaires
ECMAScript 2015 (6th Edition, ECMA-262)
La définition de 'name' dans cette spécification.
Standard Définition initiale.
ECMAScript 2017 Draft (ECMA-262)
La définition de 'name' dans cette spécification.
Projet  

Compatibilité des navigateurs

Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
Support simple 33 (Oui) Pas de support (Oui) (Oui)
Configurable : true 43 38 (38) ? ? ?
Inférence des noms pour les fonctions anonymes 51.0 Pas de support [1] ? ? ?
Fonctionnalité Android Webview Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Support simple (Oui) (Oui) (Oui) Pas de support (Oui) (Oui)
Configurable : true ? ? 38.0 (38) ? ? ?
Inférence des noms pour les fonctions anonymes Pas de support 51.0 Pas de support [1] ? ? ?

[1] cf. bug 883377

Étiquettes et contributeurs liés au document

 Contributeurs à cette page : SphinxKnight, teoli
 Dernière mise à jour par : SphinxKnight,