Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.
Это экспериментальная технология, часть предложения Harmony (ECMAScript 6).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.
Начиная с ECMAScript 6, существует короткий синтаксис для определения методов в инициализаторе объекта. По сути, это сокращение для функции, которая назначена имени метода.
Синтаксис
var obj = { property([parameters]) {}, get property() {}, set property(value) {}, * generator() {} };
Описание
Короткий синтаксис похожий на синтаксис getter'ов и setter'ов представленых в ECMAScript 5.
Следующий код:
var obj = { foo: function() {}, bar: function() {} };
Вы теперь можете сократить до:
var obj = { foo() {}, bar() {} };
Сокращение методов-генераторов
Методы-генераторы также могут быть определены используя короткий синтаксис. Обратите внимание, что звездочка (*) в коротком синтаксисе должна быть перед именем свойства генератора. То есть, * g(){}
будет работать, а g *(){}
не будет.
// Используя свойство с именем (pre-ES6) var obj2 = { g: function*() { var index = 0; while(true) yield index++; } }; // Тот же объект используя короткий синтаксис var obj2 = { * g() { var index = 0; while(true) yield index++; } }; var it = obj2.g(); console.log(it.next().value); // 0 console.log(it.next().value); // 1
Определения методов (ES6) не могут быть конструкторами
Все определения методов кроме методов-генераторов не могут быть конструкторами и будут выбрасывать TypeError
если вы попытаетесь создать их экземпляр.
var obj = { method() {}, }; new obj.method; // TypeError: obj.method is not a constructor var obj = { * g() {} }; new obj.g; // Генератор
Примеры
Простой тестовый пример
var obj = { a : "foo", b(){ return this.a; } }; console.log(obj.b()); // "foo"
Вычисляемые имена свойств
Короткий синтаксис также поддерживает вычисляемые имена свойств.
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
Спецификации
Спецификация | Статус | Комментарий |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) Определение 'Method definitions' в этой спецификации. |
Стандарт | Изначальное определение. |
Совместимость с браузерами
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Method definition shorthand | 39 | 34 (34) | Нет | 26 | Нет |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Method definition shorthand | Нет | Нет | 34.0 (34) | Нет | Нет | Нет |
SpiderMonkey-specific notes
- Prior to SpiderMonkey 38 (Firefox 38 / Thunderbird 38 / SeaMonkey 2.35), "
get
" and "set
" were invalid names for generator methods. This has been fixed in баг 1073809. - Prior to SpiderMonkey 41 (Firefox 41 / Thunderbird 41 / SeaMonkey 2.38), curly braces were not required in method definitions. They are required from now on to conform to the ES6 specification and will throw a
SyntaxError
in this and later versions (баг 1150855).var o = {x() 12}; // SyntaxError
- The restriction that only generator methods are constructors has been implemented in SpiderMonkey 41 (Firefox 41 / Thunderbird 41 / SeaMonkey 2.38). See also баг 1059908 and баг 1166950.