2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								id: 587d7b8c367417b2b2512b54
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								title: Utiliza getters (accesores) y setters (mutadores) para controlar el acceso a un objeto
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								challengeType: 1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								forumTopicId: 301220
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								dashedName: use-getters-and-setters-to-control-access-to-an-object
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --description--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Puedes obtener valores de un objeto y establecer el valor de una propiedad dentro de un objeto.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Estas operaciones clásicamente se llaman < dfn > getters< / dfn >  y < dfn > setters< / dfn > .
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Las funciones getter están destinadas a simplemente devolver (get) el valor de la variable privada de un objeto al usuario sin que el usuario acceda directamente a la variable privada.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Las funciones setter están destinadas a modificar (set) el valor de la variable privada de un objeto basado en el valor pasado a la función setter. Este cambio podría implicar cálculos, o incluso sobrescribir completamente el valor anterior.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class Book {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor(author) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this._author = author;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // getter
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  get writer() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return this._author;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // setter
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set writer(updatedAuthor) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this._author = updatedAuthor;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const novel = new Book('anonymous');
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								console.log(novel.writer);
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								novel.writer = 'newAuthor';
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								console.log(novel.writer);
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								La consola mostrará las cadenas `anonymous`  y `newAuthor` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Ten en cuenta la sintaxis usada para invocar el getter y el setter. Ni siquiera se ven como funciones. Los getter y los setter son importantes porque ocultan los detalles internos de la implementación.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								**Nota:** Es convención preceder el nombre de una variable privada con un guión bajo (`_` ). Sin embargo, la práctica en sí misma no hace una variable privada.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --instructions--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Utiliza la palabra clave `class`  para crear una clase `Thermostat` . El `constructor`  acepta una temperatura Fahrenheit.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								En la clase, crea un `getter`  para obtener la temperatura en Celsius y un `setter`  para ajustar la temperatura en Celsius.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Recuerda que `C = 5/9 * (F - 32)`  y `F = C * 9.0 / 5 + 32`  donde `F`  es el valor de la temperatura en Fahrenheit y `C`  es el valor de la misma temperatura en Celsius.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								**Nota:** Cuando implementes esto, rastrearás la temperatura dentro de la clase en una escala, ya sea Fahrenheit o Celsius.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Este es el poder de un getter y un setter. Estás creando una API para otro usuario, que puede obtener el resultado correcto independientemente de cuál estés rastreando.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								En otras palabras, estás abstrayendo los detalles de la implementación del usuario.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --hints--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								`Thermostat`  debe ser una `class`  con un método `constructor`  definido. 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  typeof Thermostat === 'function' & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    typeof Thermostat.constructor === 'function'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								La palabra clave `class`  debe ser utilizada.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(code.match(/class/g));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								`Thermostat`  debe ser capaz de ser instanciado. 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  (() => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const t = new Thermostat(122);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return typeof t === 'object';
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  })()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Cuando se crea una instancia con un valor de Fahrenheit, `Thermostat`  debe establecer la temperatura (`temperature` ) correcta.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  (() => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const t = new Thermostat(122);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return t.temperature === 50;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  })()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Un `getter`  debe ser definido.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  (() => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const desc = Object.getOwnPropertyDescriptor(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Thermostat.prototype,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'temperature'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return !!desc & &  typeof desc.get === 'function';
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  })()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Un `setter`  debe ser definido.
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  (() => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const desc = Object.getOwnPropertyDescriptor(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      Thermostat.prototype,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'temperature'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return !!desc & &  typeof desc.set === 'function';
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  })()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-03-20 00:31:24 -06:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Llamar al `setter`  con un valor Celsius debe establecer `temperature` .
							 
						 
					
						
							
								
									
										
										
										
											2021-02-06 04:42:36 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  (() => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const t = new Thermostat(32);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    t.temperature = 26;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const u = new Thermostat(32);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    u.temperature = 50;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return t.temperature === 26 & &  u.temperature === 50;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  })()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --seed--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## --seed-contents--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Only change code below this line
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// Only change code above this line
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const thermos = new Thermostat(76); // Setting in Fahrenheit scale
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let temp = thermos.temperature; // 24.44 in Celsius
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								thermos.temperature = 26;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								temp = thermos.temperature; // 26 in Celsius
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --solutions--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class Thermostat {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor(fahrenheit) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this._tempInCelsius = 5/9 * (fahrenheit - 32);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  get temperature(){
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return this._tempInCelsius;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  set temperature(newTemp){
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this._tempInCelsius = newTemp;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const thermos = new Thermostat(76); // Setting in Fahrenheit scale
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								let temp = thermos.temperature; // 24.44 in Celsius
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								thermos.temperature = 26;
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								temp = thermos.temperature; // 26 in Celsius
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```