в чем преимущество сеттеров в javaScript - PullRequest
0 голосов
/ 16 апреля 2020

Так что я изучал JavaScript с тех пор go, и я действительно не могу получить преимущества от использования сеттеров.
Подобно да, геттеры кажутся полезными, чтобы избежать ненужной замены значения переменной, хотя, как и для сеттеров, он говорит, что может быть полезно проверить, являются ли новые данные действительными перед установкой свойства, однако мы можем сделать это, даже не используя setter
Например,

    const person = {
      height: 150,
      set newHeight(num){
        if(typeof(num)=='number' && num>=0)
        {
          this.height=num
        }
        else
        {
          console.log('error');
        }
      }
    };

    person.newHeight=200
    console.log(person.height) //output:200

, так что это использует setter,
в то время как если бы мы не использовали setter, тогда

const person = {
  height: 150,
  newHeight(num){
    if(typeof(num)=='number' && num>0)
    {
      this.height=num
    }
    else
    {
      console.log('error');
    }
  }
};

person.newHeight(200)
console.log(person.height) //output:200

так в чем же разница между использованием сеттеров и не использованием одного
Извините, если я что-то понял не так
Заранее спасибо !!!

1 Ответ

0 голосов
/ 16 апреля 2020

Методы получения и установки происходят из идеи инкапсуляции, которая является гораздо более сильной концепцией в таких языках, как Java. В Java следующий код крайне не рекомендуется:

myObj.somePublicVar = newVal;

В то время как в Javascript это обычная практика. В Java соглашение состоит в том, чтобы создать метод получения и установки для каждой переменной, которую вы собираетесь сделать publi c, и держать переменную, объявленную как private. Таким образом, вы должны иметь:

private int myVar;
public int getMyVar() {
  return myVar;
}
public void setMyVar(int val) {
  this.myVar = val;
}

Теоретически это полезно для предотвращения непреднамеренного или нежелательного изменения внутренних состояний объекта. Например, вы можете с помощью sh выставлять только получатель указанных состояний, не позволяя устанавливать их. Таким образом, другие программисты, использующие ваш код в качестве библиотеки, с меньшей вероятностью нарушат ваш код, неосознанно испортив некоторые важные состояния. Также, например, вы можете wi sh проверить новое значение перед его фактической установкой, так что вы получите что-то вроде:

public void setScore(int val) {
  if (val < 0) this.score = 0;
  else if (val > 100) this.score = 100;
  else this.score = val;
}

На практике это строгое соблюдение соглашения часто вызывает больше головной боли, чем льготы. Вы часто видите Java классы с более чем 50% строк, выделенных для различных методов получения и установки, что замедляет разработку.


Javascript добавлена ​​поддержка методов получения и установки, так что если разработчики хотят более строгого контроля, они могут сделать это . Однако, если вы не разрабатываете библиотеку или не участвуете в большом совместном проекте, я сомневаюсь, что преимущества будут иметь какую-либо практическую ценность. Так что TLDR; если вы простой разработчик или работаете только над небольшими проектами, не беспокойтесь - это вызовет больше проблем, чем принесет пользу.

...