Function.prototype.toString()
=============================

O método **`toString()`** retorna uma string representando o código fonte da função.

Experimente
-----------

Sintaxe
-------
```

function.toString()
```

### Valor de retorno

Uma string representando o código fonte da função.

Descrição
---------

O objeto da `Function` substitui o método `toString` herdado de `Object`; ele não herda `Object.prototype.toString`. Para objetos `Function` definidos pelo usuário, o método `toString` retorna uma string contendo o seguimento de texto de origem que foi usado para definir a função

O JavaScript chama o método `toString` automaticamente quando uma `Function` pode ser representada como um valor de texto. e.x. quando uma função é concatenada com uma string.

O método `toString()` lançará uma exceção do tipo `TypeError` ("Function.prototype.toString called on incompatible object") se o valor `this` do objeto não é um objeto do tipo `Function.`


```js
Function.prototype.toString.call("foo"); // TypeError
```


Se o método `toString()` é chamado por objetos de funções embutidas ou por uma função criada por `Function.prototype.bind`, `toString()` retorna uma string de uma função nativa que parece


```js
"function () {\n [native code]\n}";
```


Se o método `toString()` é chamado por uma função criada pelo contrutor de `Function`, `toString()` retorna o código fonte de uma declaração de função sintetizada chamada "anonymous" usando os parâmetros passados e o corpo da função.

Exemplos
--------

| Função | Function.prototype.toString resultado |
| --- | --- |
| 
```
function f(){}
```
 | 
```
"function f(){}"
```
 |
| 
```
class A { a(){} }
```
 | 
```
"class A { a(){} }"
```
 |
| 
```
function* g(){}
```
 | 
```
"function* g(){}"
```
 |
| 
```
a => a
```
 | 
```
"a => a"
```
 |
| 
```
({ a(){} }.a)
```
 | 
```
"a(){}"
```
 |
| 
```
({ *a(){} }.a)
```
 | 
```
"*a(){}"
```
 |
| 
```
({ [0](){} }[0])
```
 | 
```
"[0](){}"
```
 |
| 
```
Object.getOwnPropertyDescriptor({
    get a(){}
}, "a").get
```
 | 
```
"get a(){}"
```
 |
| 
```
Object.getOwnPropertyDescriptor({
    set a(x){}
}, "a").set
```
 | 
```
"set a(x){}"
```
 |
| 
```
Function.prototype.toString
```
 | 
```
"function toString() { [native code] }"
```
 |
| 
```
(function f(){}.bind(0))
```
 | 
```
"function () { [native code] }"
```
 |
| 
```
Function("a", "b")
```
 | 
```
"function anonymous(a\n) {\nb\n}"
```
 |

Especificações
--------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-function.prototype.tostring |

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Notas específicas do Firefox
----------------------------

* Desde o Firefox 17 a função `Function.prototype.toString()` tem sido implementada salvando o fonte da função. O descompilador foi removido o que torna o parâmetro `indentation` desnecessário. Veja Erro do Firefox 761723 para mais detalhes.
* Do Firefox 38 para o 63 a função `Function.prototype.toString()` lançava exceções para objetos `Proxy` (Erro do Firefox 1100936 e Erro do Firefox 1440468).
Veja também
-----------

* `Object.prototype.toString()`