Function.name
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
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