Aprovecha el precio especial

Antes:$249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comienza ahora

Termina en:

02d

00h

54m

19s

2

Objeto Literal y Objeto de Clase en Javascript

✨🦄

Si aún no tienes conocimientos de POO (Programación Orientada a Objetos), es probable que el concepto de clase pueda resultar extraño. Sin embargo, es un elemento de la programación sencillo de entender.
Quiero que te quedes con este simple concepto:

Una clase es un tipo de dato que puedes usar como una plantilla, el cual puede poseer atributos y métodos propios.

Ejemplo de una clase en js:

Creacion de la clase

Para entender mejor el concepto de clase, vamos a crear una clase llamada ‘persona’, la cual tendrá un nombre, un apellido y edad.

classPersona{
  constructor(nombre, edad, ciudad) {
    this.nombre = nombre;
    this.edad = edad;
    this.ciudad = ciudad;
  }
}

No te asustes, más adelante te explico lo que hace el temido constructor.

Creación de un nuevo objeto a partir de una clase

Ahora bien, para crear un nuevo objeto a partir de la clase que acabamos de crear debemos usar un elemento de la POO que se llama ‘constructor’.
El constructor simplemente lo que hace es crear una nueva instancia de una clase. Mira como lo hacemos:

let primeraPersona = new Persona("Cris",20,"Latacunga");

Acceso a los datos del nuevo objeto

Ahora, tenemos la capacidad de acceder a los datos de primeraPersona de la siguiente manera:

primeraPersona.nombre; //"Cris"
primeraPersona.edad; //20
primeraPersona.ciudad; //"Latacunga"

¿Que te parece si creamos una función en la clase Persona que nos permita imprimir el objeto persona que acabamos de crear?

La ventaja de las clases es que nos permiten establecer funciones o métodos exclusivamente para dicha clase. Ejemplo:
A la clase Persona, a parte de su respectivo controlador, le vamos a agregar una función para impresión:

classPersona{
  constructor(nombre, edad, ciudad) {
    this.nombre = nombre;
    this.edad = edad;
    this.ciudad = ciudad;
  }
  //Nuevo método para impresión
  imprimirPersona(){
	console.log(`Mi nombre es ${this.nombre}, tengo ${this.edad} y vivo en la ciudad de ${this.ciudad}`);
  }
}

Acceder a dicha función es muy sencillo, simplemente tenemos que mencionar a nuestro objeto y mandar a llamar a la función, mira:

primeraPersona.imprimirPersona();
//Output: Mi nombre es Cris, tengo 20y vivo enla ciudad de Latacunga

Ahora teniendo claro lo que es una clase y como podemos hacer uso de la misma, vamos a ver lo que es un objeto literal 😃

Ejemplo de un Objeto Literal en js

Javascript por defecto, nos permite crear objetos aunque no tengamos una clase de la cual partir. Esto se hace de la siguiente manera:

let personaLiteral = {
  nombre: "Juan",
  edad: 20,
  ciudad: "Ambato"
};

Acabamos de hacer algo muy similar a lo que realizamos con una clase ‘Persona’ hace un momento. Incluso pareciera ser más sencillo y simple de entender.
La manera de acceder a sus datos es la misma incluso, simplemente ubicar un punto luego del objeto con el nombre de la propiedad que deseamos. (Ej: personaLiteral.nombre).
De igual manera, podemos definir funciones dentro de un objeto literal de la siguiente manera:

let personaLiteral = {
  nombre: "Juan",
  edad: 30,
  ciudad: "Ambato",
  imprimirPersona: function() {
    console.log(`Mi nombre es ${this.nombre}, tengo ${this.edad} y vivo en la ciudad de ${this.ciudad}`);
  }
};

Y para acceder a la función, solo basta con llamar al nombre de su propiedad:

persona.imprimirPersona(); 
//Output: Mi nombre es Juan, tengo 30y vivo enla ciudad de Ambato

Espero que estés entendiendo todo hasta ahora n.n. Porque ahora es momento de entender cuando conviene usar uno u otro tipo de objeto.

Cuando usar una Clase y cuando Objetos Litetales

Quizá en este momento te encuentres un poco confundido respecto al uso de objetos. Pero mira, para ponerlo simple, debes usar una Clase definida cuando requieras realizar más de un objeto con la misma o similar forma. Ejemplo:

  • Supongamos que requieres los datos de varias personas y necesitas hacer una serie de acciones con dichas personas.
    multitud
    Observas que existen un sinnúmero de personas, y si decides usar Objetos Literales tendrías que hacer algo como:
let personaLiteral1 = {
  nombre: "Juan",
  edad: 10,
  ciudad: "Ambato",
  imprimirPersona: function() {
  ...
  }
let personaLiteral2 = {
  nombre: "Juana",
  edad: 28,
  ciudad: "Quito",
  ...
  }
let personaLiteral3 = {
  nombre: "Nombre shido",
  edad: 27,
  ciudad: "Loja",
  ...
  }
  ... Y un laaaargo etcétera.
};

Pero si en primera lugar realizas una clase con atributos y métodos que puedes reutilizar, simplemente tendrías que hacer algo como lo siguiente:

let personaDeClase1 = new Persona("Juan",10,"Ambato");
let personaDeClase2 = new Persona("Juana",28,"Quito");
let personaDeClase3 = new Persona("Nombre shido",27,"Loja");
...

¿Lo notas? Es mucho más eficiente y fácil de leer usando una Clase.

Además ¿Qué pasaría si tuvieras que establecer atributos privados u ocultos? ¿O si la cantidad de métodos es muy numerosa?

En este caso, donde se requieren ‘multiples instancias’ de un tipo de dato con estructura ‘similar’, se recomienda usar una Clase, de la cual puedas partir.


~

Pero evidentemente, no en todos los casos es eficiente usar una clase independiente y exclusiva para crear un objeto.
En las ocasiones donde tengas un número muy limitado de instancias para un objeto y que además no se tenga una estructura necesariamente similar, puedes realizar el uso de un Objeto Literal. Ejemplo:

  • Supongamos que tenemos un solo pato, el es único, es el último pato de todos los patos y es imposibe que existan más patos.
    enter image description here
    ¿Crees que tendría sentido crear una clase exclusiva para un solo pato?
    La respuesta evidente es: no.
    En lugar de eso podrías hacer algo como lo siguiente:
let pato= {
  nombre: "Duck",
  accion: "Cuack",
  estadoCivil: "Soltero",
  ...
  }

Aclaración: esto es solo un ejemplo, evidentemente podrías crear una clase exclusiva si así lo deseas.
Míralo, es tan tierno 🦆.

.


En resumen:

  • Si requieres de varios objetos con estructura similar, usa objetos a partir de una clase.
  • Si requieres de pocos objetos no necesariamente similares, usa objetos literales.

Ahora bien ¿Qué pasaría si tengo objetos que tienen ciertas características en común, pero no son similares en su totalidad? 👀
La respuesta a esta pregunta la encontrarás cuando veas más conceptos relacionados con la Programación Orientada a Objetos en tu futuro camino como programador, cosas como la encapsulación, herencia, polimorfismo, etc.
.
Gracias por leer, espero que te haya gustado n.n 💚

Escribe tu comentario
+ 2
2
901Puntos
un año

Me encantó, muchs gracias por compartir.