@Quintis

Как определить сеттеры и гетеры в функции-конструкторе?

Есть задача , сделать так что если меняется одно свойство , то оно должно меняться и в другом месте. Например если мы изменили firstName то должно изменить и fullName. Сама задачка - https://www.codewars.com/kata/547f1a8d4a437abdf800...
Вот код , но он проходит не все проверки в режиме ATTEMPT. Скажите пожалуйста, что надо сделать что бы функция прошла все проверки ?
function NamedOne(first, last) {
  // -- SHOULD be changed --
  let firstName = first;
  let lastName = last;
  let  fullName = firstName + " " + lastName;
  Object.defineProperty(this, 'firstName', {
    get: function () {
        console.log('get!');
        return firstName;
    },
    set: function (value) {
      firstName = value;
      fullName = firstName + " " + lastName;
    }
});
Object.defineProperty(this, 'lastName', {
  get: function () {
      console.log('get!');
      return lastName;
  },
  set: function (value) {
    lastName = value;
    fullName = firstName + " " + lastName;
  }
});
Object.defineProperty(this, 'fullName', {
  get: function () {
      return fullName;
  },
  set: function (value) {
    fullName = value;
    const arr = value.split(" ")
    firstName = arr[0]
    lastName = arr[1]
  }
});
}


var namedOne = new NamedOne("Naomi", "Wang");

namedOne.firstName = "John";
namedOne.lastName = "Doe";
namedOne.fullName = "Doe Fast";

console.log(namedOne.fullName);
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
@Mirival
Во первых в конструкторе для определения свойств нужно использовать this.
Во вторых вычисляемое значение здесь только fullName.
И в третьих по условию нужно проверять валидность назначаемого fullName.

function NamedOne(first, last) {
// -- SHOULD be changed -- 
  this.firstName = first;
  this.lastName = last;

  Object.defineProperty(this, 'fullName', {
    get: function () {
      return this.firstName + " " + this.lastName;
    },
    set: function (value) {
      const initials = value.split(" ");
      if (initials.length >= 2) {
        this.firstName = initials[0];
        this.lastName = initials[1]
      }
    }
  });
}


геттеры и сеттеры
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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