Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
Definições de Método
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since setembro de 2015.
No ECMAScript 2015 foi introduzida uma sintaxe reduzida para definição de métodos em inicializadores de objetos. É uma abreviação para uma função atribuída ao nome do método.
In this article
Experimente
const obj = { foo() { return "bar"; },};console.log(obj.foo());// Expected output: "bar"Sintaxe
var obj = { propriedade( parametros… ) {}, *generator( parametros… ) {},// também com chaves computadas: [propriedade]( parameters… ) {}, *[generator]( parametros… ) {},// compare ES5 sintaxe para getter/setter: get propriedade() {}, set propriedade(valor) {}};Descrição
A sintaxe reduzida é similar à dagetter esetter introduzida no ECMAScript 5.
Dado o seguinte código:
var obj = { foo: function () {}, bar: function () {},};Agora você pode reduzi-lo para isto:
var obj = { foo() {}, bar() {},};Generator methods
Osgenerator methods também podem ser definidos utilizando a sintaxe reduzida.
- Observe que o asterisco (*) na sintaxe reduzida deve estar antes do nome da propriedade generator. Assim,
* g(){}funcionará, porémg *(){}não. - Se o método não for generator, sua definição não pode conter a palavra-chave
yield. Dessa forma,generator functions legadas também não funcionarão, lançando umSyntaxError. Sempre utilizeyieldem conjunto com o asterisco (*)
// Utilizando a propriedade com nome (pre-ES6)var obj2 = { g: function* () { var indice = 0; while (true) yield indice++; },};// O mesmo objeto utilizando a sintaxe reduzidavar obj2 = { *g() { var indice = 0; while (true) yield indice++; },};var coisa = obj2.g();console.log(coisa.next().value); // 0console.log(coisa.next().value); // 1Métodos assíncronos
Funções assíncronas também podem ser definidas usando a sintaxe reduzida.
// Utilizando a propriedade com nome (pre-ES6)var obj3 = { f: async function () { await alguma_promise; },};// O mesmo objeto com a sintaxe reduzidavar obj3 = { async f() { await alguma_promise; },};Generator methods assíncronos
Osgenerator methods também podem serassíncronos
var obj4 = { f: async function* () { yield 1; yield 2; yield 3; },};// O mesmo objeto com a sintaxe reduzidavar obj4 = { async *f() { yield 1; yield 2; yield 3; },};Métodos reduzidos não são construíveis
Métodos assim definidos não são construtores e lançarão umTypeError se você tentar instanciá-los.
var obj = { metodo() {},};new obj.metodo(); // TypeError: obj.method is not a constructorvar obj = { *g() {},};new obj.g(); // TypeError: obj.g is not a constructor (modificado no ES2016)Exemplos
>Caso de teste simples
var obj = { a: "foo", b() { return this.a; },};console.log(obj.b()); // "foo"Nome de propriedades computados
A sintaxe reduzida também suporta nome de propriedades computados.
var bar = { foo0: function () { return 0; }, foo1() { return 1; }, ["foo" + 2]() { return 2; },};console.log(bar.foo0()); // 0console.log(bar.foo1()); // 1console.log(bar.foo2()); // 2Especificações
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-method-definitions> |