From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../javascript/reference/classes/static/index.html | 137 +++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 files/uk/web/javascript/reference/classes/static/index.html (limited to 'files/uk/web/javascript/reference/classes/static') diff --git a/files/uk/web/javascript/reference/classes/static/index.html b/files/uk/web/javascript/reference/classes/static/index.html new file mode 100644 index 0000000000..3f676d3d6e --- /dev/null +++ b/files/uk/web/javascript/reference/classes/static/index.html @@ -0,0 +1,137 @@ +--- +title: static +slug: Web/JavaScript/Reference/Classes/static +tags: + - ECMAScript 2015 + - JavaScript + - Static + - Класи + - Статичний +translation_of: Web/JavaScript/Reference/Classes/static +--- +
{{jsSidebar("Classes")}}
+ +

Ключове слово static визначає статичний метод класу. Статичні методи не викликаються на екземплярах класу. Вони натомість викликаються на самому класі. Часто це допоміжні функції, такі як функції для створення чи клонування об'єктів.

+ +
{{EmbedInteractiveExample("pages/js/classes-static.html")}}
+ + + +

Синтаксис

+ +
static methodName() { ... }
+ +

Опис

+ +

Виклики статичного методу виконуються безпосередньо через клас, і неможливі на екземплярах класу. Статичні методи часто застосовуються для створення різноманітних допоміжних функцій.

+ +

Виклик статичних методів

+ +

З іншого статичного методу

+ +

Щоб звернутися до статичного методу зсередини іншого статичного методу в межах одного класу, можна використати ключове слово this.

+ +
class StaticMethodCall {
+  static staticMethod() {
+    return 'Викликано статичний метод';
+  }
+  static anotherStaticMethod() {
+    return this.staticMethod() + ' зсередини іншого статичного методу';
+  }
+}
+StaticMethodCall.staticMethod();
+// 'Викликано статичний метод'
+
+StaticMethodCall.anotherStaticMethod();
+// 'Викликано статичний метод зсередини іншого статичного методу'
+ +

Зсередини конструктора класу, чи інших звичайних методів

+ +

Статичні методи недоступні напряму за ключовим словом this зсередини нестатичних методів. Слід викликати їх, використовуючи ім'я класу: CLASSNAME.STATIC_METHOD_NAME(); або ж звертаючись до методу як до властивості конструктора: this.constructor.STATIC_METHOD_NAME().

+ +
class StaticMethodCall {
+  constructor() {
+    console.log(StaticMethodCall.staticMethod());
+    // 'Викликано статичний метод.'
+
+    console.log(this.constructor.staticMethod());
+    // 'Викликано статичний метод.'
+  }
+
+  static staticMethod() {
+    return 'Викликано статичний метод.';
+  }
+}
+ +

Приклади

+ +

Наступний приклад демонструє декілька аспектів:

+ +
    +
  1. Яким чином статичний метод реалізується у класі.
  2. +
  3. Що цей клас із статичним членом може наслідуватись підкласом.
  4. +
  5. Як статичний метод викликати можна, а як — ні.
  6. +
+ +
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'.
+
+ +

Специфікації

+ + + + + + + + + + + + + + + + + + + +
СпецифікаціяСтатусПримітка
{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ES2015')}}Первинне визначення.
{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}{{Spec2('ESDraft')}}
+ +

Сумісність з веб-переглядачами

+ + + +

{{Compat("javascript.classes.static")}}

+ +

Дивіться також

+ + -- cgit v1.2.3-54-g00ecf