--- title: Function.name slug: Web/JavaScript/Reference/Global_Objects/Function/name translation_of: Web/JavaScript/Reference/Global_Objects/Function/name original_slug: Web/JavaScript/Referencia/Objetos_globales/Function/name ---
La propiedad function.name
retorna el nombre de la función o retorna "anonymous"
por funciones creadas anónimamente.
configurable
también era false
.La propiedad name
retorna el nombre de una declaración de función.
function doSomething() {} console.log(doSomething.name); // imprime en pantalla "doSomething"
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
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 {{jsxref("Operators/Function", "function expression", "", 1)}}:
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 {{jsxref("Object.defineProperty()")}} para cambiarlo.
var o = { foo(){} }; o.foo.name; // "foo";
{{jsxref("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"
Cuando se usan get
y set,
"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";
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"
Para versiones de IE < 9, se puede usar fn._name()
en su lugar. Para IE9 o posteriores se puede usar el siguiente polyfill.
Especificación | Estado | Comentarios |
---|---|---|
{{SpecName('ES2015', '#sec-name', 'name')}} | {{Spec2('ES2015')}} | Definición inicial. |
{{SpecName('ESDraft', '#sec-name', 'name')}} | {{Spec2('ESDraft')}} |