Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Статические свойства и методы
Можно создать свойства, поля и методы, связанные с самим классом, а не с его экземпляром. Такие свойства, поля и методы называются статическими. При использовании инструкции class
перед именем статического поля или метода указывается ключевое слово static
. Обратите внимание: внутри статических методов нет доступа к обычным свойствам и методам. В листинге 11.12 мы передаем объект в качестве параметра статического метода. Указатель this
внутри статического метода ссылается на класс, а не на экземпляр. Через него мы можем обратиться к статическим членам класса. Статическое свойство можно добавить вне блока класса, указав перед его именем название класса и оператор точка
.
Листинг 11.12. Статические свойства, поля и методы
class Car {
static msg = 'Модель:'; // Статическое поле
constructor(m) {
this.model = m;
console.log(this);
// Car { model: 'ВАЗ-2109' }
}
static showInfo(obj) { // Статический метод
console.log(`${this.msg} ${obj.model}`);
console.log(this);
// [class Car] { msg: 'Модель:', test: 'test' }
}
info() {
console.log(`${Car.msg} ${this.model}`);
console.log(`${this.constructor.msg} ${this.model}`);
}
}
Car.test = 'test'; // Статическое свойство
let obj = new Car('ВАЗ-2109');
Car.showInfo(obj); // Модель: ВАЗ-2109
console.log(Car.msg); // Модель:
console.log(Car.test); // test
obj.info();
// Модель: ВАЗ-2109
// Модель: ВАЗ-2109
Внутри обычного метода обращение к статическим членам осуществляется с помощью названия класса или свойства constructor
:
console.log(`${Car.msg} ${this.model}`);
console.log(`${this.constructor.msg} ${this.model}`);
Статические поля можно сделать приватными (листинг 11.13), добавив перед именем поля символ #
. Обращаться к приватным полям допускается только внутри методов класса.
Листинг 11.13. Приватные статические поля и методы
class Car {
static #msg = 'Модель:'; // Приватное статическое поле
static #test = function() { // Приватный статический метод
console.log('test()');
};
constructor(m) {
this.model = m;
}
showInfo() {
console.log(`${Car.#msg} ${this.model}`);
Car.#test();
}
}
let obj = new Car('ВАЗ-2109');
obj.showInfo();
// Модель: ВАЗ-2109
// test()
// console.log(Car.#msg);
// SyntaxError: Private field '#msg' must be declared
// in an enclosing class
// Car.#test();
// SyntaxError: Private field '#test' must be declared
// in an enclosing class
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов