Определение методов
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.
Please take two minutes to fill out our short survey.
Начиная с ECMAScript 6, существует короткий синтаксис для определения методов в инициализаторе объекта. По сути, это сокращение для функции, которая назначена имени метода.
Синтаксис
var obj = { property([parameters]) {}, get property() {}, set property(value) {}, * generator() {} };
Описание
Сокращение методов-генераторов
Методы-генераторы также могут быть определены используя короткий синтаксис. Обратите внимание, что звёздочка (*) в коротком синтаксисе должна быть перед именем свойства генератора. То есть, * 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
Спецификации
Specification |
---|
ECMAScript® 2026 Language Specification # sec-method-definitions |