From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../javascript/reference/classes/static/index.html | 129 +++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 files/ru/web/javascript/reference/classes/static/index.html (limited to 'files/ru/web/javascript/reference/classes/static') diff --git a/files/ru/web/javascript/reference/classes/static/index.html b/files/ru/web/javascript/reference/classes/static/index.html new file mode 100644 index 0000000000..cec6516733 --- /dev/null +++ b/files/ru/web/javascript/reference/classes/static/index.html @@ -0,0 +1,129 @@ +--- +title: static +slug: Web/JavaScript/Reference/Classes/static +translation_of: Web/JavaScript/Reference/Classes/static +--- +
{{jsSidebar("Classes")}}
+ +

Для того, чтобы объявить статический метод класса, необходимо использовать ключевое слово static.

+ +

Синтаксис

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

Описание

+ +

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

+ +

Вызов статических методов

+ +

Вызов из другого статического метода

+ +

Чтобы вызвать статический метод в другом статическом методе того же класса, вы можете использовать ключевое слово 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());
+// Выведет сообщение, что "tripple" не является
+// функцией ('tp.tripple 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