В классах, как и в обычных объектах, можно объявлять геттеры и сеттеры через get/set, а также использовать […] для свойств с вычисляемыми именами:
'use strict';
class User {
constructor(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
// геттер
get fullName() {
return `${this.firstName} ${this.lastName}`;
}
// сеттер
set fullName(newValue) {
[this.firstName, this.lastName] = newValue.split(' ');
}
// вычисляемое название метода
["test".toUpperCase()]() {
alert("PASSED!");
}
};
let user = new User("Вася", "Пупков");
alert( user.fullName ); // Вася Пупков
user.fullName = "Иван Петров";
alert( user.fullName ); // Иван Петров
user.TEST(); // PASSED!
При чтении fullName будет вызван метод get fullName()
, при присвоении – метод set fullName
с новым значением.
``` class
не позволяет задавать свойства-значения
В синтаксисе классов, как мы видели выше, можно создавать методы. Они будут записаны в прототип, как например User.prototype.sayHi.
Однако, нет возможности задать в прототипе обычное значение (не функцию), такое как User.prototype.key = "value".
Конечно, никто не мешает после объявления класса в прототип дописать подобные свойства, однако предполагается, что в прототипе должны быть только методы.
Если свойство-значение, всё же, необходимо, то можно создать геттер, который будет нужное значение возвращать.```