static

Для того, чтобы объявить статический метод класса, необходимо использовать ключевое слово 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. Как можно и как нельзя вызывать статические методы.
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').

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

Спецификация Статус Комментарии
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Class definitions' в этой спецификации.
Стандарт Изначальное определение
ECMAScript (ECMA-262)
Определение 'Class definitions' в этой спецификации.
Живой стандарт  

Поддержка в браузерах

Update compatibility data on GitHub
КомпьютерыМобильныеServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome для AndroidFirefox для AndroidOpera для AndroidSafari on iOSSamsung InternetNode.js
staticChrome Полная поддержка 49
Полная поддержка 49
Нет поддержки 42 — 49
Замечания
Замечания Strict mode is required.
Нет поддержки 42 — 49
Отключено
Отключено From version 42 until version 49 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Edge Полная поддержка 13Firefox Полная поддержка 45IE Нет поддержки НетOpera Полная поддержка 36
Полная поддержка 36
Нет поддержки 29 — 36
Замечания
Замечания Strict mode is required.
Нет поддержки 29 — 36
Отключено
Отключено From version 29 until version 36 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled).
Safari Полная поддержка 9WebView Android Полная поддержка 49
Полная поддержка 49
Нет поддержки 42 — 49
Замечания
Замечания Strict mode is required.
Chrome Android Полная поддержка 49
Полная поддержка 49
Нет поддержки 42 — 49
Замечания
Замечания Strict mode is required.
Нет поддержки 42 — 49
Отключено
Отключено From version 42 until version 49 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled). To change preferences in Chrome, visit chrome://flags.
Firefox Android Полная поддержка 45Opera Android Полная поддержка 36
Полная поддержка 36
Нет поддержки 29 — 36
Замечания
Замечания Strict mode is required.
Нет поддержки 29 — 36
Отключено
Отключено From version 29 until version 36 (exclusive): this feature is behind the Experimental JavaScript preference (needs to be set to Enabled).
Safari iOS Полная поддержка 9Samsung Internet Android Полная поддержка 5.0
Полная поддержка 5.0
Нет поддержки 4.0 — 5.0
Замечания
Замечания Strict mode is required.
nodejs Полная поддержка 6.0.0
Полная поддержка 6.0.0
Полная поддержка 4.0.0
Отключено
Отключено From version 4.0.0: this feature is behind the --use_strict runtime flag.
Полная поддержка 5.0.0
Отключено
Отключено From version 5.0.0: this feature is behind the --harmony runtime flag.

Легенда

Полная поддержка  
Полная поддержка
Нет поддержки  
Нет поддержки
Смотрите замечания реализации.
Смотрите замечания реализации.
Пользователь должен сам включить эту возможность.
Пользователь должен сам включить эту возможность.

Смотрите также