Определение методов
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() {} };
Описание
Сокращение методов-генераторов
Методы-генераторы также могут быть определены используя короткий синтаксис. Обратите внимание, что звёздочка (*) в коротком синтаксисе должна быть перед именем свойства генератора. То есть, * 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 Language Specification # sec-method-definitions |
Совместимость с браузерами
BCD tables only load in the browser