В этом руководстве вы узнаете о статических свойствах класса JavaScript и о том, как получить доступ к свойствам в статическом методе, конструкторе класса и других методах экземпляра.
Как и статический метод, статическое свойство является общим для всех экземпляров класса. Чтобы определить его, используйте ключевое слово static
, за которым следует имя свойства, например:
class Item { static count = 0; }
Чтобы получить доступ к статическому свойству, вы используете имя класса, за которым следует расширение .
оператор и имя свойства. Например:
console.log(Item.count); // 0
Чтобы получить доступ к статическому свойству в статическом методе, вы используете имя класса, за которым следует расширение .
оператор и имя. Например:
class Item { static count = 0; static getCount() { return Item.count; } } console.log(Item.getCount()); // 0
Чтобы получить доступ к статическому свойству в конструкторе класса или методах экземпляра, вы используете следующий синтаксис:
className.staticPropertyName;
Или же:
this.constructor.staticPropertyName;
В следующем примере увеличивается статическое свойство count
в конструкторе класса:
class Item { constructor(name, quantity) { this.name = name; this.quantity = quantity; this.constructor.count++; } static count = 0; static getCount() { return Item.count++; } }
Когда вы создаете новый экземпляр класса Item
, следующий оператор увеличивает статическое свойство count
на единицу:
this.constructor.count++;
Например:
// Item class ... let pen = new Item("Pen", 5); let notebook = new Item("notebook", 10); console.log(Item.getCount()); // 2
В этом примере создаются два экземпляра класса Item
, который вызывает конструктор класса. Поскольку конструктор класса увеличивает свойство count
на единицу при каждом вызове, значение count
равно двум.
Положил все это вместе:
class Item { constructor(name, quantity) { this.name = name; this.quantity = quantity; this.constructor.count++; } static count = 0; static getCount() { return Item.count++; } } let pen = new Item("Pen", 5); let notebook = new Item("notebook", 10); console.log(Item.getCount()); // 2
Заключение
- Статическое свойство класса является общим для всех экземпляров этого класса.
- Используйте ключевое слово
static
для определения статического свойства. - Используйте
className.staticPropertyName
для доступа к свойству в статическом методе. - Используйте
this.constructor.staticPropertyName
илиclassName.staticPropertyName
для доступа к статическому свойству в конструкторе.