@kirillleogky

Как работает get set в классе?

Туплю
Не могу понять как происходит проверка на длинну слова
При задании let user = new User("Иван"); как он проверяет с помощью set?
Ведь get и set находятся в prototype. Как они проверяют на колличество букв?
class User {

    constructor(name) {
        // вызывает сеттер
        this.name = name;
    }

    get name() {
        return this._name;
    }

    set name(value) {
        if (value.length < 4) {
            alert("Имя слишком короткое.");
            return;
        }
        this._name = value;
    }

}

let user = new User("Иван");
alert(user.name); // Иван

user = new User(""); // Имя слишком короткое.
  • Вопрос задан
  • 512 просмотров
Решения вопроса 1
filgaponenko
@filgaponenko
frontend developer
Все верно, функции находятся в prototype.
В момент вызова конструктора создается пустой объект и в его прототип записываются свойства геттер и сеттер.

Но это не просто свойство, а сеттер.
Когда транспайлер разбирает ваш класс он устанавливает свойство при помощи свойства set defineProperties.

Если у объекта в цепочке прототипов есть сетер, то будет использован именно он.
Вот пример на простых объектах.
5d4a920131d7c315637512.jpeg
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы