--- title: static slug: Web/JavaScript/Reference/Classes/static tags: - ECMAScript 2015 - JavaScript - Static - Класи - Статичний translation_of: Web/JavaScript/Reference/Classes/static ---
Ключове слово static
визначає статичний метод класу. Статичні методи не викликаються на екземплярах класу. Вони натомість викликаються на самому класі. Часто це допоміжні функції, такі як функції для створення чи клонування об'єктів.
Джерело цих інтерактивних прикладів зберігається у репозиторії на GitHub. Якщо ви маєте бажання зробити свій внесок у проект інтерактивних прикладів - будь ласка, зклонуйте репозиторій https://github.com/mdn/interactive-examples та пришліть нам pull request.
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 'Викликано статичний метод.'; } }
Наступний приклад демонструє декілька аспектів:
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")}}