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

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!
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.