Задать вопрос
@sad0990

Чем в классах JavaScript по функционалу различаются constructor и set? Почему при описании класса должно присутствовать и то, и другое?

И для чего нужно _dogName, если есть просто dogName?

class Dog
{
  constructor(dogName)
  {
     this.dogName = dogName;
  }
  set dogName(value)
  {
    this._dogName = value;
  }
  get dogName()
  {
    return this._dogName;
  }
}
let dog = new Dog("Rex");
console.log(dog.dogName);
  • Вопрос задан
  • 233 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Почему при описании класса должно присутствовать и то, и другое?
С чего вы взяли? Может не быть ни того, ни другого.

Чем в классах JavaScript по функционалу различаются constructor и set?
Сеттеры отвечают за установку значения одного конкретного свойства; конструктор - за инициализацию объекта в целом.

И для чего нужно _dogName, если есть просто dogName?
Не может быть у объекта свойства (_dogName) и метода-сеттера (dogName) с одинаковым названием.

Приведённый вами пример можно упростить до такого и всё продолжит работать:
class Dog
{
  constructor(dogName)
  {
     this.dogName = dogName;
  }
}
let dog = new Dog("Rex");
console.log(dog.dogName);


Пока забудьте про геттеры и сеттеры - когда они вам понадобятся, вы сразу поймёте зачем они нужны. Сосредоточьтесь на конструкторах для начала.
Ответ написан
loktionov129
@loktionov129
Backend .NET Developer
И для чего нужно _dogName, если есть просто dogName?

Геттеры и сеттеры -- Классика жанра. Они нужны чтобы у пользователей класса не было полного доступа к внутренностям класса Dog. Чтобы разработчик класса мог контроллировать установку значения dogName. Например:

const blackList = ['Мурзик', 'Васька', 'Эпифантий'];
// ... 
  set dogName(value)
  {
    if (!value || !_.isString(value)) {
      throw new Error('value must be a string!') ;
    }
    if (blackList.includes(value) {
      throw new Error('wrong value!') ;
    }
    this._dogName = value;
  }
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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