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
.
Descripción
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 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";
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"
Especificaciones
Specification |
---|
ECMAScript Language Specification # sec-function-instances-name |
Compatibilidad con navegadores
BCD tables only load in the browser