Propiedades
con get y set en Javascript
Conoce
los getters y setters en Javascript, llamados accessors, que permiten
crear lo que se conoce propiedades computadas cuyo valor se extrae de
métodos declarados con get y set.
En
este artículo vamos a conocer los getters y los setters de
Javascript, una herramienta disponible en objetos de Javascript, que
existe en el lenguaje desde hace bastante tiempo y que muchos
desconocen. Son los getters y los setters con get y set en los
objetos o clases de Javascript.
En
principio, esta utilidad se encuentra disponible en navegadores muy
antiguos, pues forma parte de ES5, así que la puedes usar con
tranquilidad. Si conoces la programación orientada a objetos, y
conceptos como encapsulación, tendrá más sentido para ti, pero si
no es así tampoco te viene mal echarle un vistazo, para cuando
encuentres código que haga uso de esta construcción del lenguaje,
que sepas de qué se trata.
Qué
es un getter o un setter
Para
los que no han oído hablar sobre éstos, los getters y los setters
son construcciones habituales de los objetos que permiten acceder a
valores o propiedades, sin revelar la forma de implemetación de las
clases. En pocas palabras, permiten encapsular los objetos y evitar
mantenimiento de las aplicaciones cuando la forma de implementar esos
objetos cambia.
Utilidad
aparte, en la práctica son simplemente métodos que te permie
acceder a datos de los objetos, para leerlos o asignar nuevos
valores. El setter lo que hace es asignar un valor y el getter se
encarga de recibir un valor.
Sin
embargo, los getters y los setters de los que vamos a hablar en
Javascript son un poco distintos de los tradicionales.
También
llamados accessors
Los
get y los set de Javascript se denominan técnicamente accessors o
también "Object Accessors". Seguramente encontrarás esta
terminología en documentación diversa de Javascript, por lo que
deberías conocer el término.
Otra
manera de denominar este tipo de miembros de objetos es con el nombre
de propiedades computadas o "computed properties" en
inglés.
Propiedades
computadas de objetos Javascript
Los
get y los set de los que nos ocupamos en este artículo son útiles
básicamente para realizar el acceso a propiedades de los objetos que
son resultado de computar otras propiedades existentes.
El
ejemplo más claro de setters y getters en Javascript lo tenemos con
el objeto persona. Est objeto podría tener un par de propiedades
como el "nombre" y los "apellidos". Además
podríamos desear conocer el nombre completo, pero realmente éste no
sería realmente una propiedad nueva del objeto, sino el resultado de
un cómputo de concatenación entre el nombre y los apellidos que
tenemos en las dos propiedades anteriores.
Es
decir, "nombreCompleto" podría ser una propiedad
computada. En los lenguajes tradicionales, incluso en Javascript si
lo deseamos, podríamos implementar ese valor computado con un método
como este:
Javascript
si lo deseamos, podríamos implementar ese valor computado con un
método, como este:
var
persona = {
nombre:
'Miguel Angel',
apellidos:
'Alvarez Sánchez',
getNombreCompleto:
function() {
return
this.nombre + ' ' + this.apellidos;
}
}
Nota:
El código anterior, y el que verás en el resto de este artículo,
está basado en objetos literales de Javascript. Lo normal sería
usar clases, pero mantendremos este estilo de codificación ya que
las clases se agregaron en el lenguaje en la versión ES6 y en este
manual estamos tratando la versión tradicional de Javascript (ES5).
Podríamos
acceder al nombre completo con este código:
var
nombreCompletoPersona = persona.getNombreCompleto();
Sin
embargo, con las construcciones get y set de Javascript la forma de
definir este código cambia un poco. Mediante la palabra reservada
"get" puedo definir una función que se encarga de realizar
el cómputo. Aquello que devuelve la función será el valor de la
propiedad computada. El código nos quería más o menos así:
var
persona = {
nombre:
'Miguel Angel',
apellidos:
'Alvarez Sánchez',
get
nombreCompleto() {
return
this.nombre + ' ' + this.apellidos;
}
}
La
novedad es el uso de la construcción "get" en el código
anterior, que nos sirve para definir una especie de método. Sin
embargo, no es un método tradicional, sino más bien una propiedad
computada, es decir, una propiedad de un objeto que para resolver su
valor tiene que ejecutar una función. Nos debería quedar claro este
punto con el código siguiente, en el que usamos esa propiedad
computada "nombreCompleto".
var
nombreCompletoPersona = persona.nombreCompleto;
Ahora
en la variable "nombreCompletoPersona" tenemos el valor del
nombre y apellidos concatenados. Fíjate para acceder a ese "getter"
usamos "persona.nombreCompleto", que es como si
estuviéramos accediendo a una propiedad convencional aunque
internamente en nuestro objeto no existe tal propiedad, sino que se
realiza un cómputo para poder evaluarla.