Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.

La propiedad function.name retorna el nombre de la función.

Atributos de la propiedad Function.name
Sobrescribir No
Numerable No
Configurable
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 Latest Draft (ECMA-262)
La definición de 'name' en esta especificación.
Draft  

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.

Etiquetas y colaboradores del documento

Colaboradores en esta página: pedro-otero, kdex, jorgecasar
Última actualización por: pedro-otero,