Como essa definição de método de object funciona sem a palavra-chave “function”?

Eu descobri isso acidentalmente deixando de fora a palavra-chave da function . Normalmente, o método foobar no módulo abaixo seria declarado como foobar: function(arg1) , mas, curiosamente, o seguinte funciona, pelo menos em alguns navegadores, por exemplo, Chrome versão 44.0.2403.157 m, mas falha no IE 11.0.9600.17959

Como é possível que isso seja executado em qualquer navegador? Isso é algum tipo de nova funcionalidade do ES6?

 var module = { foobar(arg1) { alert(arg1); } }; module.foobar("Hello World"); 

Como é possível que isso seja executado em qualquer navegador? É algum tipo de nova funcionalidade do ES6?

Sim

Definições de methods

Uma propriedade de um object também pode se referir a uma function ou a um método getter ou setter.

 var o = { property: function ([parameters]) {}, get property() {}, set property(value) {}, }; 

No ECMAScript 6, uma notação abreviada está disponível, para que a palavra-chave “function” não seja mais necessária.

 // Shorthand method names (ES6) var o = { property([parameters]) {}, get property() {}, set property(value) {}, * generator() {} }; 

O ES6 permite “methods concisos” que, como você descobriu, não são compatíveis com vários navegadores ainda.