Las palabras clave get y set
Parte de la sección Programación Orientada a Objetos del Journey de JavaScript de Coddy — lección 43 de 56.
Los getters y setters son métodos especiales que parecen propiedades pero que en realidad son funciones. Te dan control sobre cómo se accede a las propiedades y cómo se modifican.
Vamos a crear una clase Person sencilla:
class Person {
constructor(firstName, lastName) {
this._firstName = firstName;
this._lastName = lastName;
}
// Getter para fullName
get fullName() {
return `${this._firstName} ${this._lastName}`;
}
// Setter para fullName
set fullName(value) {
const parts = value.split(' ');
this._firstName = parts[0];
this._lastName = parts[1];
}
}Ahora podemos usar estos getters y setters como propiedades:
// Crear un nuevo Person
const person = new Person('John', 'Doe');
// Usar el getter
console.log(person.fullName); // Salida: John Doe
// Usar el setter
person.fullName = 'Jane Smith';
// El setter ha actualizado las propiedades internas
console.log(person.fullName); // Salida: Jane SmithObserva que no llamamos a estos métodos con paréntesis. Se comportan igual que las propiedades, pero ejecutan código cuando se accede a ellas o se modifican.
Desafío
Se te da una clase User con una propiedad age. Tu tarea es añadir un getter y un setter para age que:
- Getter
<strong>get age()</strong>: devuelve la edad almacenada - Setter
<strong>set age(newAge)</strong>: valida que la edad esté entre 0 y 120- Si es válida (0-120): almacénala en
this._age - Si no es válida: no la cambies y registra
"Invalid age!"
- Si es válida (0-120): almacénala en
Hoja de referencia
Los getters y setters son métodos especiales que parecen propiedades pero ejecutan código cuando se accede a ellos o se modifican.
Getter - utiliza la palabra clave get para definir un método que devuelve un valor:
class Person {
constructor(firstName, lastName) {
this._firstName = firstName;
this._lastName = lastName;
}
get fullName() {
return `${this._firstName} ${this._lastName}`;
}
}Setter - utiliza la palabra clave set para definir un método que acepta un valor:
class Person {
set fullName(value) {
const parts = value.split(' ');
this._firstName = parts[0];
this._lastName = parts[1];
}
}Uso - accede a los getters y setters como si fueran propiedades (sin paréntesis):
const person = new Person('John', 'Doe');
// Using getter
console.log(person.fullName); // John Doe
// Using setter
person.fullName = 'Jane Smith';
console.log(person.fullName); // Jane SmithPruébalo tú mismo
import { User } from './user.js';
// Código de prueba - no modificar
const user = new User("Alice", 25);
console.log(user.age); // Debería mostrar 25
user.age = 30;
console.log(user.age); // Debería mostrar 30
user.age = 150; // Debería mostrar "Invalid age!"
console.log(user.age); // Debería seguir mostrando 30 (sin cambios)
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación Orientada a Objetos
1Objetos y la palabra clave this
Repaso rápido: ObjetosAgregar métodos a los objetosEntendiendo la palabra clave thisFunciones constructorasLa palabra clave newDesafío de repaso7Herencia y la palabra clave extends
HerenciaLa relación "es-un"La palabra clave extendsEl método super()Heredar propiedades y métodosDesafío de repaso13Composición vs. Herencia
La relación "tiene-un" vs. "es-un"Los límites de la herencia profundaConstrucción de objetos2Organización del código
¿Qué son los módulos?Exportar con exportImportar con importExportaciones por defecto vs. nombradas5Encapsulamiento y Acceso
EncapsulamientoCampos de clase públicos y privadosMétodos privadosDesafío de repaso8Organización del código OOP
Organizar clases en módulos11Proyecto: Un renderizador de figuras
Configuración: Clase Figura y exportaciónHerencia de la clase Círculo14Sistema de Gestión de Biblioteca
Diseño de la BibliotecaClase Libro con Composición9Métodos y propiedades estáticos
Nivel de clase vs. Nivel de instanciaPropiedades estáticasMétodos de utilidad estáticosDesafío de repaso12Getters y Setters
Las palabras clave get y setPropiedades computadasValidación y efectos secundariosDesafío de repaso