Для чего используются методы изменения значений полей класса, если можно изменить значение напрямую?

143
18 декабря 2018, 12:00

Разбираюсь потихоньку в javascript. Есть класс Weather в нем несколько свойств объявлено, вроде этого. И в нем функция(метод) для изменения этого самого свойства.

class Weather {
 constructor() {
   this.location;
   // ну и т.д.
 }
 changeLocation(location) {
   this.location = location;
 }
}

В примере это выглядит как

const weather = new Weather();
const location = 'London, UK';
weather.changeLocation(location);

Мне не совсем понятно зачем здесь функция(метод)? Ведь можно просто

const weather = new Weather();
const location = 'London, UK';
weather.location = location;

Не проще ли так ? И не надо дергать функцию(метод). Как правильно? Как это принято делать?

Answer 1

Хорошей практикой является изменение свойств объекта через функцию. Это нужно для того, что ты или другой разработчик (если проект командный) не смог просто взять и поменять это свойство на что угодно. В случае с функцией ты сможешь добавлять всякие проверки на корректность нового значения.

class Weather { 
 constructor() { 
   this.location; 
 } 
 
 changeLocation(location) { 
   if (typeof location !== 'string') { 
     throw new Error('Invalid location value'); 
   } 
    
   this.location = location; 
 } 
} 
 
const invalidLocation = [1,2,3, {test: 3}]; // невалидный тип 
const validLocation = 'London, UK'; //валидный тип 
 
const weather1 = new Weather(); 
weather1.location = invalidLocation; // таким кодом ты сможешь сломать свое приложение, но с сточки зрения кода все ок) 
 
 
const weather2 = new Weather(); 
weather2.changeLocation(invalidLocation); // получишь ошибку и это свойство не будет присваиваться 
 
const weather3 = new Weather(); 
weather3.changeLocation(validLocation); // ошибки не будет и код отработает корректно 

READ ALSO
Не срабатывает меню, при нажатии на body

Не срабатывает меню, при нажатии на body

есть тестовая страница ссылка

164
Как передать параметр при нажатие на кнопку в React?

Как передать параметр при нажатие на кнопку в React?

Мне необходимо в localStorage создать объект в котором будут хранится закладкиПытался найти какой нибудь гайд, решение ,пример как просто передать...

142
image src dataUrl некорректно работает jQuery.rotate.js

image src dataUrl некорректно работает jQuery.rotate.js

Всем привет! вот codePenЕсть картинка, src dataUrl

155
JavaScript heap out of memory

JavaScript heap out of memory

Имеется конфиг для webpack:

207