@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!'
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
  • @MaxKorz
    function User(newFullName) {
        if (!~newFullName.indexOf(' ')) throw new TypeError('Must be 2 words');
    
        var fullName = newFullName;
    
        Object.defineProperties(this, {
            fullName: {
              get: function() {
                return fullName;
              },
              
              enumerable: true
            },
            firstName: {
                get: function () {
                    return fullName.split(' ')[0];
                },
    
                set: function (newFirstName) {
                    fullName = newFirstName + ' ' + this.lastName;
                },
    
                enumerable: true
            },
            lastName: {
                get: function () {
                    return fullName.split(' ')[1];
                },
    
                set: function (newLastName) {
                    fullName = this.firstName + ' ' + newLastName;
                },
              
                enumerable: true
            }
        });
    }
    
    let person = new User("Василий Палкин");
    person.fullName = 'It must not work!';
    console.log(person.fullName); // Василий Палкин
    Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы