2017-02-20 8 views
9

Я знаю, как геттер и сеттер работают в JavaScript. Я не понимаю, почему они нужны нам, когда мы можем получить тот же результат, используя обычные функции? Рассмотрим следующий код:Зачем использовать геттеры и сеттеры в 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 

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

+0

Ваш вопрос о том, что лучше ?, или как это сделать? –

+4

Я думаю, что это просто «стиль», поскольку вам «не нужно» их использовать, вы «можете» использовать их, если хотите, –

+1

проверить [это] (http://stackoverflow.com/a/ 28222366/2545680) и [this] (http://stackoverflow.com/questions/1568091/why-use-getters-and-setters) –

ответ

3

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

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

+1

И вопрос в том, почему 'foo.bar = baz', используя сеттер, лучше, чем' foo.setBar (baz) '... – deceze

+0

Вопрос был несколько иным, чем то, что вы все равно понимаете, добавили второй абзац, чтобы уточнить преимущество. –

+0

Предполагая, что вы разрабатываете интерфейс с самого начала, чтобы использовать геттеры/сеттеры вместо того, чтобы его дорабатывать ... что твой ответ? – deceze