Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

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

Перевод не завершен. Пожалуйста, помогите перевести эту статью с английского.

Это экспериментальная технология, часть предложения 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.

Смотрите также

Метки документа и участники

 Внесли вклад в эту страницу: sergeymakoveev, BatenkovT
 Обновлялась последний раз: sergeymakoveev,