Публичные и приватные поля классов
Несколько предложений расширяют существующий синтаксис классов JavaScript новыми функциями. В этой статье объясняется новый синтаксис публичных полей классов в V8 v7.2 и Chrome 72, а также предстоящий синтаксис приватных полей классов.
Вот пример кода, который создает экземпляр класса с именем IncreasingCounter
:
const counter = new IncreasingCounter();
counter.value;
// выводит 'Получение текущего значения!'
// → 0
counter.increment();
counter.value;
// выводит 'Получение текущего значения!'
// → 1
Обратите внимание, что доступ к value
выполняет некоторый код (например, записывает сообщение) перед возвратом результата. Теперь задайте себе вопрос, как вы бы реализовали этот класс на JavaScript? 🤔
Синтаксис классов ES2015
Вот как можно было бы реализовать IncreasingCounter
с использованием синтаксиса классов ES2015:
class IncreasingCounter {
constructor() {
this._count = 0;
}
get value() {
console.log('Получение текущего значения!');
return this._count;
}
increment() {
this._count++;
}
}
Класс устанавливает геттер value
и метод increment
на прототипе. Более интересно то, что класс имеет конструктор, который создает свойство экземпляра _count
и задает для него значение по умолчанию 0
. В настоящее время мы часто используем префикс подчеркивания, чтобы указать, что _count
не должен напрямую использоваться потребителями класса, но это всего лишь соглашение; на самом деле это не приватное свойство со специальной семантикой, обеспечиваемой языком.