Definições de Método

Esta tradução está incompleta. Ajude atraduzir este artigo.

No ECMAScript 2015 foi introduziada uma sintaxe reduzida para definição de método em inicializadores de objetos. É uma abreviação para uma função atribuída ao nome do método.

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 a da getter e setter  introduziada 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() {}
};

Métodos generator curtas

Métodos generator podem ser definidos utilizando a sintaxe reduzida também. Observe que o asterisco (*) no sintaxe reduzido deve estar antes do nome da propriedade generator. Assim, * g(){} funcionará, porém g *(){} não.

// Utilizando a propriedade com nome (pre-ES6)
var obj2 = {
  g: function*() {
    var indice = 0;
    while(true)
      yield indice++;
  }
};

// O mesmo objeto utilizando a sintaxe reduzida
var obj2 = { 
  * g() {
    var indice = 0;
    while(true)
      yield indice++;
  }
};

var coisa = obj2.g();
console.log(coisa.next().value); // 0
console.log(coisa.next().value); // 1

Definições de métodos não construíveis

As definições de métodos, exceto métodos generator, não são construtore e será lançada uma excessão TypeError se tentar instanciá-los.

var obj = { 
  metodo() {},
};
new obj.metodo; // TypeError: obj.method is not a constructor

var obj = { 
  * g() {} 
};
new obj.g; // Generator

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()); // 0
console.log(bar.foo1()); // 1
console.log(bar.foo2()); // 2

Especificações

Especificações Estado Comentário
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Method definitions' in that specification.
Standard Initial definition.
ECMAScript 2016 Draft (7th Edition, ECMA-262)
The definition of 'Method definitions' in that specification.
Draft  

Compatibilidade de browser

Característica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Definição de método reduzida 39 34 (34) Não suportado 26 Não suportado
Característica Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Definição de método reduzida     Não suportado Não suportado 34.0 (34) Não suportado Não suportado Não suportado

Considerações do SpiderMonkey

  • Antes do SpiderMonkey 38 (Firefox 38 / Thunderbird 38 / SeaMonkey 2.35),  "get" e "set" eram nomes inválidos para métodos generator. Isso foi corrigido no bug 1073809.
  • Antes do SpiderMonkey 41 (Firefox 41 / Thunderbird 41 / SeaMonkey 2.38), caracteres de chaves não eram obrigatórios em todas as definições de métodos. Agora são obrigatórios para atender as especificações do ES6 e será lançado uma excessão SyntaxError nessa e posteriores versões (bug 1150855).
    var o = {x() 12}; // SyntaxError
  • A restrição de somentes os métodos generator são construturoes foi implementado no SpiderMonkey 41 (Firefox 41 / Thunderbird 41 / SeaMonkey 2.38). Veja bug 1059908 e bug 1166950.

Veja também

Etiquetas do documento e colaboradores

 Colaboradores desta página: michael-nishikawa
 Última atualização por: michael-nishikawa,