Get to know MDN better
Esta página foi traduzida do inglês pela comunidade. Saiba mais e junte-se à comunidade MDN Web Docs.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since agosto de 2016.
A propriedade somente-leitura name de um objeto Function indica o nome da função como especificado quando esta foi criada, ou "anonymous" para funções criadas anonimamente.
| Writable | no |
| Enumerable | no |
| Configurable | yes |
Nota: Note que em implementações não-standard anteriores à ES2015 o atributo configurable tinha também o valor false.
A propriedade name retorna o nome de uma declaração de função.
Funções criadas com a sintaxe new Function(...) ou somente Function(...) criam objetos Function com o nome "anonymous".
(new Function).name; // "anonymous"Variáveis e métodos podem inferir o nome de uma função anônima a partir de sua posição sintática (novo na ECMAScript 2015).
Você pode definir uma função com um nome numa expressão de função:
Você não pode mudar o nome de uma função, pois a propriedade é somente-leitura:
Para mudá-lo, você poderia no entanto usar Object.defineProperty().
Function.bind() produz uma função cujo nome é "bound " seguido do nome da função.
Ao usar propriedades acessórias get e set, "get" ou "set" aparecerão no nome da função.
Você pode usar obj.constructor.name para checar a "classe" de um objeto (porém leia com atenção os avisos abaixo):
Aviso: O interpretador vai definir a propriedade interna Function.name somente se uma função não tiver uma propriedade já com o nome name (veja a seção 9.2.11 da ECMAScript2015 Language Specification). Porém, a ES2015 especifica que a palavra-chave static de maneira que métodos estáticos serão definidos como OwnProperty da função construtora de classe (ECMAScript2015, 14.5.14.21.b + 12.2.6.9).
Portanto não podemos obter o nome de virtualmente qualquer classe com um método estático name():
Com um método static name(), Foo.name não guarda mais o nome verdadeiro da classe mas uma referência ao objeto de função name(). A definição de classe acima, escrita em sintaxe ES2015, se comportará de maneira similar ao seguinte trecho de código em sintaxe ES5 no Chrome ou no Firefox:
Tentar obter a classe de fooInstance via fooInstance.constructor.name não nos dará de maneira alguma o nome da classe, mas sim uma referência ao método estático da classe. Exemplo:
Você pode ver também, a partir do exemplo de sintaxe ES5, que, no Chrome ou no Firefox, a nossa definição estática de Foo.name se torna writable. A predefinição interna na ausência de uma definição estática customizada é somente-leitura:
Portanto, você não pode assumir que a propriedade interna Function.name sempre guardará um nome de classe..
Se um Symbol é usado como nome de função e o símbolo tem uma descrição, o nome do método será a descrição entre colchetes.
var sym1 = Symbol("foo"); var sym2 = Symbol(); var o = { [sym1]: function(){}, [sym2]: function(){} }; o[sym1].name; // "[foo]" o[sym2].name; // ""Aviso: Tenha cuidado ao usar Function.name e transformações de código-fonte, como aquelas executadas por compressores (minificadores) ou obfuscadores de JavaScript. Estas ferramentas são comumente usadas como parte de processos de build de JavaScript para reduzir os tamanhos de programas antes da implementação em produção. Tais transformações frequentemente mudam nomes de função durante o build.
Código fonte do tipo:
pode ser comprimido e se tornar:
Na versão descomprimida, o programa cai no bloco-verdade e grava o log 'foo' is an instance of 'Foo'. Todavia, na versão comprimida ele se comporta diferentemente, e cai no bloco else. Se você depende de Function.name, como no exemplo acima, tenha certeza que seu processo de build não mude nomes de função, ou então não assuma que uma função terá um nome determinado.
| ECMAScript® 2027 Language Specification # sec-function-instances-name |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 17 de fev. de 2025 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.