@AlphaDMQ

Как запретить явное изменение свойства fullName?

function User(fullName) {
    if (!~fullName.indexOf(' ')) throw new TypeError('Must be 2 words');

    this.fullName = fullName;

    Object.defineProperties(this, {
        firstName: {
            get: function () {
                return this.fullName.split(' ')[0];
            },

            set: function (newFirstName) {
                this.fullName = newFirstName + ' ' + this.lastName;
            },

            configurable: false,
            enumerable: true
        },
        lastName: {
            get: function () {
                return this.fullName.split(' ')[1];
            },

            set: function (newLastName) {
                this.fullName = this.firstName + ' ' + newLastName;
            },

            configurable: false,
            enumerable: true
        }
    });
}

let person = new User("Василий Палкин");

// person.fullName = 'It must not work!'
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
SPAHI4
@SPAHI4
реактовцы - это не девы, а прокидыватели пропсов
Логичней будет сделать наоборот - задавать отдельно firstName и lastName, а fullName сделать вычисляемым полем.
И использовать es6 classes.

class User {
  get fullName() {
    return `${this.firstName} ${this.lastName}`;
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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