В ES6 наконец то добавили поддержку классов. Новый синтаксис не вводит новую объектно ориентированную модель. Внутри используются всё теже прототипы. Новый синтаксис - это так называемый syntactic sugar или синтаксический сахар - который призван упростить работу с классами в JS.
class Task {
// конструктор для объявления переменных
constructor(title = Task.getDefaultTitle()) {
this.title = title;
this._done = false;
Task.count += 1; // доступ к статическому свойству
console.log('Создание задачи');
}
// геттер
get done() {
return this._done === true ? 'Выполнена' : 'Не выполнена';
}
// сеттер
set done(value) {
if (value !== undefined && typeof value === 'boolean') {
this._done = value;
} else {
console.error('Ошибка! Укажите значение true или false');
}
}
// обычный метод
complete() {
this.done = 1; // доступ к переменной done через сеттер
console.log(`Задача "${this.title}" выполнена`);
}
// статический метод
static getDefaultTitle() {
return 'Задача';
}
}
Task.count = 0; // статическое свойство, объявленное за пределами класса
let task = new Task('Убрать комнату');
console.log(task.done, task._done);
task.complete();
console.log(task.done, task._done);
// Создание задачи
// Не выполнена false
// Ошибка! Укажите значение true или false
// Задача "Убрать комнату" выполнена
// Не выполнена false