Function.name

La propiedad function.name retorna el nombre de la funci贸n o retorna "anonymous" por funciones creadas an贸nimamente.

Atributos de la propiedad Function.name
Sobrescribir No
Numerable No
Configurable S铆
N贸tese que en implementaciones no est谩ndar previas a ES2015 el atributo configurable tambi茅n era false.

Ejemplos

Nombre de una declaraci贸n de funci贸n

La propiedad name retorna el nombre de una declaraci贸n de funci贸n.

function doSomething() {}

console.log(doSomething.name); // imprime en pantalla "doSomething"

Nombre de constructor de funci贸n

Las funciones creadas con la sintaxis new Function(...) o simplemente Function(...) tienen como propiedad name una cadena vac铆a. En los ejemplos a continuaci贸n se crean funciones an贸nimas, tales que su name retorna una cadena vac铆a:

var f = function() {};
var object = {
  someMethod: function() {}
};

console.log(f.name == ''); // true
console.log(object.someMethod.name == ''); // tambi茅n true

Nombres de funci贸n inferidos

Los navegadores que implementan funciones ES2015 pueden inferir el nombre de una funci贸n an贸nima de su posici贸n sint谩ctica. Por ejemplo:

var f = function() {};
console.log(f.name); // "f"

Se puede definir una funci贸n con un nombre en un function expression:

var object = {
  someMethod: function object_someMethod() {}
};
console.log(object.someMethod.name); // imprime "object_someMethod"

try { object_someMethod } catch(e) { console.log(e); }
// ReferenceError: object_someMethod is not defined

No se puede cambiar el nombre de una funci贸n, esta propiedad es de solo lectura:

var object = {
  // anonymous
  someMethod: function() {}
};

object.someMethod.name = 'someMethod';
console.log(object.someMethod.name); // cadena vac铆a, someMethod es an贸nimo

Sin embargo, se puede usar Object.defineProperty() para cambiarlo.

Nombres de m茅todos

var o = {
  foo(){}
};
o.foo.name; // "foo";

Nombres de funciones atadas (creadas con .bind())

Function.bind() produce una funci贸n cuyo nombre es igual a "bound " seguido del nombre de la funci贸n original.

function foo() {};
foo.bind({}).name; // "bound foo"

Nombres de funciones getters y setters

Cuando se usan getset, "get" y "set" aparecer谩n en el nombre de la funci贸n.

var o = {
  get foo(){},
  set foo(x){}
};

var descriptor = Object.getOwnPropertyDescriptor(o, "foo");
descriptor.get.name; // "get foo"
descriptor.set.name; // "set foo";

Ejemplos

Se puede usar obj.constructor.name para saber cu谩l es la "clase" de un objeto:

function a() {}

var b = new a();

console.log(b.constructor.name); // imprime "a"

Polyfill

Para versiones de IE < 9, se puede usar fn._name() en su lugar. Para IE9 o posteriores se puede usar el siguiente polyfill.

Especificaciones

Especificaci贸n Estado Comentarios
ECMAScript 2015 (6th Edition, ECMA-262)
La definici贸n de 'name' en esta especificaci贸n.
Standard Definici贸n inicial.
ECMAScript (ECMA-262)
La definici贸n de 'name' en esta especificaci贸n.
Living Standard  

Compatibilidad con navegadores

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help! (en-US)
Caracter铆stica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Soporte b谩sico 33.0 (Yes) Sin soporte (Yes) (Yes)
Configurable: true 43.0 38 (38) ? ? ?
Nombres inferidos en funciones an贸nimas 51.0 Sin soporte [1] ? ? ?
Caracter铆stica Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Soporte b谩sico (Yes) (Yes) (Yes) Sin soporte (Yes) (Yes) (Yes)
Configurable: true ? ? 38.0 (38) ? ? ? ?
Nombres inferidos en funciones an贸nimas Sin soporte 51.0 Sin soporte [1] ? ? ? 51.0

[1] See error 883377.