Ключове слово static визначає статичний метод класу.

Синтаксис

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. Як статичний метод викликати можна, а як — ні.
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'.

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

Специфікація Статуіс Примітка
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Class definitions' in that specification.
Standard Первинне визначення.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Class definitions' in that specification.
Draft  

Підтримка у браузерах

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidiOS SafariSamsung InternetNode.js
Basic supportChrome Full support 49
Notes
Full support 49
Notes
Notes From Chrome 42 to 48 strict mode is required. Non-strict mode support can be enabled using the flag "Enable Experimental JavaScript".
Edge Full support 13Firefox Full support 45IE No support NoOpera Full support 36Safari Full support 9WebView Android ? Chrome Android Full support YesEdge Mobile Full support 13Firefox Android Full support 45Opera Android ? Safari iOS Full support 9Samsung Internet Android Full support Yesnodejs Full support 6.0.0
Full support 6.0.0
Full support 4.0.0
Disabled
Disabled From version 4.0.0: this feature is behind the --use_strict runtime flag.
Full support 5.0.0
Disabled
Disabled From version 5.0.0: this feature is behind the --harmony runtime flag.

Legend

Full support  
Full support
No support  
No support
Compatibility unknown  
Compatibility unknown
See implementation notes.
See implementation notes.
User must explicitly enable this feature.
User must explicitly enable this feature.

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

Мітки документа й учасники

Зробили внесок у цю сторінку: AdriandeCita
Востаннє оновлена: AdriandeCita,