Задать вопрос
Romashishka
@Romashishka
Frontend developer

Зачем в ES6 get и set?

Для чего в ES6 get и set, если к свойству всё равно имеется прямой доступ(и на чтение и на запись)??

class Dream {
    constructor() {
        this._name = 'Roman';
    }
    get name() {
        return this._name;
    }
    set name(value) {
        this._name = value;
    }
}
console.log(this.name); // Roman
console.log(this._name);// Roman
  • Вопрос задан
  • 5165 просмотров
Подписаться 3 Оценить 1 комментарий
Решения вопроса 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Можно делать свойства, вычисляемые на лету (пример супербоянистый):
get fullName() { return `${this.name} ${this.surname}`; },
set fullName(value) { [this.name, this.surname] = value.split(' '); },


Можно сделать автоматическую персистентность (не очень удачная идея, если честно, но иногда надо):
set someProp(value) { localStorage.set('someProp', value) }


Можно прикрутить временное логирование для отлова обращений к свойству.

Vue.js использует акцессоры для имплементации реактивности.

На самом деле, применений не так уж много, но иногда нужно.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
mannaro
@mannaro Куратор тега JavaScript
Умею профессионально гуглить
Потому что аксессоры в JS предназначены для того, чтобы задать какую-то логику на геттер или сеттер. Таким образом можно, например, реализовать счетчик того, сколько раз какое-то свойство было изменено и т.п.
Да и с помощью них можно реализовать такую штуку как:

var Test;
(function() {
  var super_priv = 1;
  Test = class {
    get priv() {
      return super_priv;
    }
    set priv(val) {
      super_priv = val;
      return priv;
    }
  };
})();
Ответ написан
Rou1997
@Rou1997
Вот есть доступ, и хорошо, свойства предназначены в первую очередь не запрещать, а "контролировать" процесс задания и получения значения свойства, а полноценно запретить доступ вообще невозможно ни в одном языке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы