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

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® 2026 Language Specification
# sec-method-definitions

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

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