Как это определение метода объекта работает без ключевого слова function?

Я обнаружил это, случайно пропустив ключевое слово function. Обычно метод foobar в модуле ниже объявляется как foobar: function(arg1), но интересно следующее работает, по крайней мере, в некоторых браузерах, например. Версия Chrome 44.0.2403.157 m, но в IE 11.0.9600.17959 не работает.

Как это возможно, чтобы это работало вообще в любом браузере? Это какая-то новая функциональность ES6?

var module = {
    foobar(arg1) {
        alert(arg1);
    }
};

module.foobar("Hello World");

person Dexygen    schedule 04.09.2015    source источник


Ответы (2)


Как это возможно, чтобы это работало вообще в любом браузере? Это какая-то новая функциональность ES6?

Да.

...

Определения методов

Свойство объекта может также ссылаться на функцию или метод получения или установки.

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

В ECMAScript 6 доступна сокращенная запись, поэтому ключевое слово «функция» больше не нужно.

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

...

person meagar    schedule 04.09.2015
comment
Однако, как видите, в первом случае new o.preperty() ведет себя нормально. Используя сокращенные имена методов, new o.property() выдает ошибку. См. здесь - person nicovank; 09.01.2017

ES6 позволяет использовать "краткие методы", которые, как вы обнаружили, еще не совместимы с разными браузерами.

person Joseph    schedule 04.09.2015