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

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Начиная с ECMAScript 6, существует короткий синтаксис для определения методов в инициализаторе объекта. По сути, это сокращение для функции, которая назначена имени метода.

Синтаксис

var obj = {
  property([parameters]) {},
  get property() {},
  set property(value) {},
  * generator() {}
};

Описание

Короткий синтаксис похожий на синтаксис getter'ов и setter'ов представленных в ECMAScript 5.

Следующий код:

js
var obj = {
  foo: function () {},
  bar: function () {},
};

Вы теперь можете сократить до:

js
var obj = {
  foo() {},
  bar() {},
};

Сокращение методов-генераторов

Методы-генераторы также могут быть определены используя короткий синтаксис. Обратите внимание, что звёздочка (*) в коротком синтаксисе должна быть перед именем свойства генератора. То есть, * g(){} будет работать, а g *(){} не будет.

js
// Используя свойство с именем (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 если вы попытаетесь создать их экземпляр.

js
var obj = {
  method() {},
};
new obj.method(); // TypeError: obj.method is not a constructor

var obj = {
  *g() {},
};
new obj.g(); // Генератор

Примеры

Простой тестовый пример

js
var obj = {
  a: "foo",
  b() {
    return this.a;
  },
};
console.log(obj.b()); // "foo"

Вычисляемые имена свойств

Короткий синтаксис также поддерживает вычисляемые имена свойств.

js
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

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

Specification
ECMAScript® 2025 Language Specification
# sec-method-definitions

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

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
Method definitions
Async generator methods
Async methods
Generator methods are not constructable (ES2016)

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

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