Repository navigation
Expand file tree
/
Copy pathindex.md
More file actions
133 lines (101 loc) · 3.42 KB
/
Copy pathindex.md
File metadata and controls
133 lines (101 loc) · 3.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
---
title: Определение методов
slug: Web/JavaScript/Reference/Functions/Method_definitions
---
{{JsSidebar("Functions")}}
Начиная с ECMAScript 6, существует короткий синтаксис для определения методов в инициализаторе объекта. По сути, это сокращение для функции, которая назначена имени метода.
## Синтаксис
```
var obj = {
property([parameters]) {},
get property() {},
set property(value) {},
* generator() {}
};
```
## Описание
Короткий синтаксис похожий на синтаксис [getter](/ru/docs/Web/JavaScript/Reference/Functions/get)'ов и [setter](/ru/docs/Web/JavaScript/Reference/Functions/set)'ов представленных в ECMAScript 5.
Следующий код:
```js
var obj = {
foo: function () {},
bar: function () {},
};
```
Вы теперь можете сократить до:
```js
var obj = {
foo() {},
bar() {},
};
```
### Сокращение методов-генераторов
[Методы-генераторы](/ru/docs/Web/JavaScript/Reference/Statements/function*) также могут быть определены используя короткий синтаксис. Обратите внимание, что звёздочка (\*) в коротком синтаксисе должна быть перед именем свойства генератора. То есть, `* 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) не могут быть конструкторами
Все определения методов кроме методов-генераторов не могут быть конструкторами и будут выбрасывать {{jsxref("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
```
## Спецификации
{{Specifications}}
## Совместимость с браузерами
{{Compat}}
## Смотрите также
- [`get`](/ru/docs/Web/JavaScript/Reference/Functions/get)
- [`set`](/ru/docs/Web/JavaScript/Reference/Functions/set)
- [Lexical grammar](/ru/docs/Web/JavaScript/Reference/Lexical_grammar)