Зачем использовать геттеры и сеттеры в JavaScript?

Я знаю, как getter и setter работают в JavaScript. Я не понимаю, почему они нужны нам, когда мы можем получить тот же результат, используя обычные функции? Рассмотрим следующий код:

var person = {
    firstName: 'Jimmy',
    lastName: 'Smith',
    get fullName() {
        return this.firstName + ' ' + this.lastName;
    }
}

console.log(person.fullName);    // Jimmy Smith

Мы можем легко заменить геттер на функцию:

var person = {
    firstName: 'Jimmy',
    lastName: 'Smith',
    fullName: function() {
        return this.firstName + ' ' + this.lastName;
    }
}

console.log(person.fullName());    // Jimmy Smith

Я не вижу смысла писать геттер и сеттер.

Ответ 1

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

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