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
134
135
136
137
|
---
title: static
slug: Web/JavaScript/Reference/Classes/static
tags:
- ECMAScript 2015
- JavaScript
- Static
- Класи
- Статичний
translation_of: Web/JavaScript/Reference/Classes/static
---
<div>{{jsSidebar("Classes")}}</div>
<p>Ключове слово <code><strong>static</strong></code> визначає статичний метод класу. Статичні методи не викликаються на екземплярах класу. Вони натомість викликаються на самому класі. Часто це допоміжні функції, такі як функції для створення чи клонування об'єктів.</p>
<div>{{EmbedInteractiveExample("pages/js/classes-static.html")}}</div>
<p class="hidden">Джерело цих інтерактивних прикладів зберігається у репозиторії на GitHub. Якщо ви маєте бажання зробити свій внесок у проект інтерактивних прикладів - будь ласка, зклонуйте репозиторій <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> та пришліть нам pull request.</p>
<h2 id="Синтаксис">Синтаксис</h2>
<pre class="syntaxbox">static <em>methodName</em>() { ... }</pre>
<h2 id="Опис">Опис</h2>
<p>Виклики статичного методу виконуються безпосередньо через клас, і неможливі на екземплярах класу. Статичні методи часто застосовуються для створення різноманітних допоміжних функцій.</p>
<h2 id="Виклик_статичних_методів">Виклик статичних методів</h2>
<h3 id="З_іншого_статичного_методу">З іншого статичного методу</h3>
<p>Щоб звернутися до статичного методу зсередини іншого статичного методу в межах одного класу, можна використати ключове слово <code><a href="/uk/docs/Web/JavaScript/Reference/Operators/this">this</a></code>.</p>
<pre class="brush: js">class StaticMethodCall {
static staticMethod() {
return 'Викликано статичний метод';
}
static anotherStaticMethod() {
return this.staticMethod() + ' зсередини іншого статичного методу';
}
}
StaticMethodCall.staticMethod();
// 'Викликано статичний метод'
StaticMethodCall.anotherStaticMethod();
// 'Викликано статичний метод зсередини іншого статичного методу'</pre>
<h3 id="Зсередини_конструктора_класу_чи_інших_звичайних_методів">Зсередини конструктора класу, чи інших звичайних методів</h3>
<p>Статичні методи недоступні напряму за ключовим словом <code><a href="/uk/docs/Web/JavaScript/Reference/Operators/this">this</a></code> зсередини нестатичних методів. Слід викликати їх, використовуючи ім'я класу: <code>CLASSNAME.STATIC_METHOD_NAME()</code>; або ж звертаючись до методу як до властивості конструктора: <code>this.constructor.STATIC_METHOD_NAME()</code>.</p>
<pre class="brush: js">class StaticMethodCall {
constructor() {
console.log(StaticMethodCall.staticMethod());
// 'Викликано статичний метод.'
console.log(this.constructor.staticMethod());
// 'Викликано статичний метод.'
}
static staticMethod() {
return 'Викликано статичний метод.';
}
}</pre>
<h2 id="Приклади">Приклади</h2>
<p>Наступний приклад демонструє декілька аспектів:</p>
<ol>
<li>Яким чином статичний метод реалізується у класі.</li>
<li>Що цей клас із статичним членом може наслідуватись підкласом.</li>
<li>Як статичний метод викликати можна, а як — ні.</li>
</ol>
<pre class="brush: js">class Triple {
static triple(n) {
if (n === undefined) {
n = 1;
}
return n * 3;
}
}
class BiggerTriple extends Triple {
static triple(n) {
return super.triple(n) * super.triple(n);
}
}
console.log(Triple.triple()); // 3
console.log(Triple.triple(6)); // 18
var tp = new Triple();
console.log(BiggerTriple.triple(3));
// 81 (Створення екземпляру предка ніяк не вплинуло на метод нащадка)
console.log(tp.triple());
// 'tp.triple is not a function'.
</pre>
<h2 id="Специфікації">Специфікації</h2>
<table class="standard-table">
<tbody>
<tr>
<th scope="col">Специфікація</th>
<th scope="col">Статус</th>
<th scope="col">Примітка</th>
</tr>
<tr>
<td>{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}}</td>
<td>{{Spec2('ES2015')}}</td>
<td>Первинне визначення.</td>
</tr>
<tr>
<td>{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}</td>
<td>{{Spec2('ESDraft')}}</td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="Сумісність_з_веб-переглядачами">Сумісність з веб-переглядачами</h2>
<div class="hidden">Таблиця сумісності на цій сторінці сформована автоматично із структурованих даних. Якщо ви маєте бажання зробити свій внесок до цих даних - будь-ласка, ось репозиторій <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>, надішліть нам свій pull request.</div>
<p>{{Compat("javascript.classes.static")}}</p>
<h2 id="Дивіться_також">Дивіться також</h2>
<ul>
<li><a href="/uk/docs/Web/JavaScript/Reference/Operators/class">Вираз класу</a></li>
<li><a href="/uk/docs/Web/JavaScript/Reference/Statements/class">Оголошення класу</a></li>
<li><a href="/uk/docs/Web/JavaScript/Reference/Classes">Класи</a></li>
</ul>
|