--- id: 587d7b8c367417b2b2512b54 title: Use getters and setters to Control Access to an Object challengeType: 1 videoUrl: '' localeTitle: Use getters e setters para controlar o acesso a um objeto --- ## Description
Você pode obter valores de um objeto e definir um valor de uma propriedade dentro de um objeto. Estes são chamados classicamente de getters e setters . As funções do Getter destinam-se a simplesmente retornar (obter) o valor da variável privada de um objeto ao usuário sem que o usuário acesse diretamente a variável privada. As funções de setter destinam-se a modificar (definir) o valor da variável privada de um objeto com base no valor passado para a função de setter. Essa alteração pode envolver cálculos ou mesmo sobrescrever completamente o valor anterior.
livro escolar {
construtor (autor) {
this._author = autor;
}
// getter
obter escritor () {
devolve this._author;
}
// setter
set writer (updatedAuthor) {
this._author = updatedAuthor;
}
}
const lol = novo livro ('anônimo');
console.log (lol.writer); // anônimo
lol.writer = 'wut';
console.log (lol.writer); // wut
Observe a sintaxe que estamos usando para invocar o getter e setter - como se eles não fossem mesmo funções. Getters e setters são importantes porque ocultam detalhes internos de implementação.
## Instructions
Use a palavra-chave class para criar uma classe Thermostat. O construtor aceita a temperatura Fahrenheit. Agora crie getter e setter na classe, para obter a temperatura na escala Celsius. Lembre-se que C = 5/9 * (F - 32) e F = C * 9.0 / 5 + 32 , onde F é o valor da temperatura na escala Fahrenheit, e C é o valor da mesma temperatura na escala Celsius. Para implementar isso, você estaria acompanhando a temperatura dentro da classe em uma escala - Fahrenheit ou Celsius. Este é o poder de getter ou setter - você está criando uma API para outro usuário, que obteria o resultado correto, não importando qual deles você rastreie. Em outras palavras, você está abstraindo os detalhes da implementação do consumidor.
## Tests
```yml tests: - text: Thermostat deve ser uma class com um método constructor definido. testString: 'assert(typeof Thermostat === "function" && typeof Thermostat.constructor === "function","Thermostat should be a class with a defined constructor method.");' - text: palavra-chave class foi usada. testString: 'getUserInput => assert(getUserInput("index").match(/class/g),"class keyword was used.");' - text: Thermostat pode ser instanciado. testString: 'assert(() => {const t = new Thermostat(32); return typeof t === "object" && t.temperature === 0;}, "Thermostat can be instantiated.");' ```
## Challenge Seed
```js function makeClass() { "use strict"; /* Alter code below this line */ /* Alter code above this line */ return Thermostat; } const Thermostat = makeClass(); const thermos = new Thermostat(76); // setting in Fahrenheit scale let temp = thermos.temperature; // 24.44 in C thermos.temperature = 26; temp = thermos.temperature; // 26 in C ```
## Solution
```js // solution required ```