--- title: Определение методов slug: Web/JavaScript/Reference/Functions/Определиние_методов translation_of: Web/JavaScript/Reference/Functions/Method_definitions ---
{{JsSidebar("Functions")}}

Начиная с 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) не могут быть конструкторами

Все определения методов кроме методов-генераторов не могут быть конструкторами и будут выбрасывать {{jsxref("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

Спецификации

Спецификация Статус Комментарий
{{SpecName('ES6', '#sec-method-definitions', 'Method definitions')}} {{Spec2('ES6')}} Изначальное определение.

Совместимость с браузерами

{{CompatibilityTable}}
Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Method definition shorthand {{CompatChrome("39")}} {{CompatGeckoDesktop("34")}} {{CompatNo}} {{CompatOpera("26")}} {{CompatNo}}
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Method definition shorthand {{CompatNo}} {{CompatNo}} {{CompatGeckoMobile("34")}} {{CompatNo}} {{CompatNo}} {{CompatNo}}

 

SpiderMonkey-specific notes

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