--- title: Определение методов slug: Web/JavaScript/Reference/Functions/Method_definitions translation_of: Web/JavaScript/Reference/Functions/Method_definitions original_slug: Web/JavaScript/Reference/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
Все определения методов кроме методов-генераторов не могут быть конструкторами и будут выбрасывать {{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')}} | Изначальное определение. |
| 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}} |
get" and "set" were invalid names for generator methods. This has been fixed in {{bug(1073809)}}.var o = {x() 12}; // SyntaxError