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.