Статические свойства класса в JavaScript

В этом руководстве вы узнаете о статических свойствах класса 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 для доступа к статическому свойству в конструкторе.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript