JavaScript

JavaScript

Tutorial JavaScript: Encapsulación

JavaScript encapsulación: técnicas y ejemplos. Aprende técnicas de encapsulación en JavaScript con ejemplos prácticos y detallados.

Aprende JavaScript GRATIS y certifícate

La encapsulación es un principio fundamental en la programación orientada a objetos (OOP) que busca encapsular, es decir, aislar y proteger la información interna de un objeto de una manera controlada, evitando el acceso y la modificación directa de sus propiedades (atributos) y métodos (funciones) desde el exterior. En JavaScript, la encapsulación puede lograrse utilizando conceptos como funciones, objetos, clausuras y ámbitos, pero no existe un mecanismo nativo de clases o modificadores de acceso, como en otros lenguajes.

A continuación, se presentan ejemplos de cómo se puede implementar la encapsulación utilizando diferentes enfoques en JavaScript.

Objeto literal con métodos de acceso:

Una posible forma de encapsulación en JavaScript es a través de objetos literales que contengan funciones que actúen como métodos de acceso (getters y setters) y de modificación de las propiedades, sin exponer las propiedades directamente.

const persona = {
  nombre: 'Juan',
  apellido: 'Pérez',

  getNombre: function() {
    return this.nombre;
  },

  setNombre: function(nombre) {
    this.nombre = nombre;
  }
};

console.log(persona.getNombre()); // 'Juan'

persona.setNombre('Pedro');
console.log(persona.getNombre()); // 'Pedro'

Sin embargo, esta aproximación no es óptima, ya que las propiedades siguen siendo públicas y accesibles directamente desde fuera del objeto (persona.nombre).

IIFE y clausuras:

Una forma más efectiva de encapsulación en JavaScript es a través de funciones anónimas auto-ejecutables (IIFE, por sus siglas en inglés, Immediately Invoked Function Expression) y clausuras, lo que permite mantener la información privada al limitar el ámbito de las variables.

const persona = (function() {
  let nombre = 'Juan';

  function getNombre() {
    return nombre;
  }

  function setNombre(nuevoNombre) {
    nombre = nuevoNombre;
  }

  return {
    getNombre: getNombre,
    setNombre: setNombre
  };
})();

console.log(persona.getNombre()); // 'Juan'

persona.setNombre('Pedro');
console.log(persona.getNombre()); // 'Pedro'

console.log(persona.nombre); // undefined

En este ejemplo, las propiedades y métodos privados se definen dentro del ámbito de la función anónima, y sólo se retornan los métodos públicos. De esta manera, la variable nombre es inaccesible desde fuera de la función (no está expuesta en el objeto persona), y solamente se puede acceder y modificar a través de los métodos getNombre y setNombre.

Clases y getters/setters:

Desde ES6, JavaScript ofrece una sintaxis más clara para crear objetos y manejar la herencia mediante el uso de clases, lo que facilita la implementación de la encapsulación utilizando getters y setters.

class Persona {
  constructor(nombre) {
    this._nombre = nombre;
  }

  get nombre() {
    return this._nombre;
  }

  set nombre(nuevoNombre) {
    this._nombre = nuevoNombre;
  }
}

const persona = new Persona('Juan');
console.log(persona.nombre); // 'Juan'

persona.nombre = 'Pedro';
console.log(persona.nombre); // 'Pedro'

console.log(persona._nombre); // 'Pedro'

Aunque esto mejora la legibilidad del código y permite una mejor implementación de OOP, la propiedad sigue siendo pública y accesible (con el prefijo _), porque JavaScript no ofrece modificadores de acceso nativos como private.

En resumen, la encapsulación en JavaScript puede lograrse utilizando diferentes enfoques, aunque no existe un mecanismo nativo y completo como en otros lenguajes. Es importante tener en cuenta estos conceptos para implementar un código más modular y fácil de mantener, así como para evitar la exposición de información sensible y la modificación involuntaria de datos internos de los objetos.

Aprende JavaScript GRATIS online

Ejercicios de esta lección Encapsulación

Evalúa tus conocimientos de esta lección Encapsulación con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Funciones flecha

JavaScript
Puzzle

Polimorfismo

JavaScript
Test

Array

JavaScript
Código

Transformación con map()

JavaScript
Test

Introducción a JavaScript

JavaScript
Test

Gestor de tareas con JavaScript

JavaScript
Proyecto

Manipulación DOM

JavaScript
Test

Funciones

JavaScript
Test

Funciones flecha

JavaScript
Código

Async / Await

JavaScript
Código

Creación y uso de variables

JavaScript
Test

Excepciones

JavaScript
Puzzle

Promises

JavaScript
Código

Funciones cierre (closure)

JavaScript
Test

Herencia

JavaScript
Puzzle

Herencia

JavaScript
Test

Estructuras de control

JavaScript
Código

Selección de elementos DOM

JavaScript
Test

Modificación de elementos DOM

JavaScript
Test

Filtrado con filter() y find()

JavaScript
Test

Funciones cierre (closure)

JavaScript
Puzzle

Funciones

JavaScript
Puzzle

Mapas con Map

JavaScript
Test

Reducción con reduce()

JavaScript
Test

Callbacks

JavaScript
Puzzle

Manipulación DOM

JavaScript
Puzzle

Promises

JavaScript
Test

Async / Await

JavaScript
Test

Eventos del DOM

JavaScript
Puzzle

Async / Await

JavaScript
Puzzle

Promises

JavaScript
Puzzle

Filtrado con filter() y find()

JavaScript
Código

Callbacks

JavaScript
Test

Creación de clases y objetos Restaurante

JavaScript
Código

Reducción con reduce()

JavaScript
Código

Filtrado con filter() y find()

JavaScript
Puzzle

Reducción con reduce()

JavaScript
Puzzle

Conjuntos con Set

JavaScript
Puzzle

Herencia de clases

JavaScript
Código

Eventos del DOM

JavaScript
Test

Clases y objetos

JavaScript
Puzzle

Modificación de elementos DOM

JavaScript
Puzzle

Mapas con Map

JavaScript
Puzzle

Funciones

JavaScript
Código

Tipos de datos

JavaScript
Test

Clases y objetos

JavaScript
Test

Array

JavaScript
Test

Conjuntos con Set

JavaScript
Test

Array

JavaScript
Puzzle

Encapsulación

JavaScript
Puzzle

Clases y objetos

JavaScript
Código

Uso de operadores

JavaScript
Puzzle

Uso de operadores

JavaScript
Test

Estructuras de control

JavaScript
Test

Excepciones

JavaScript
Test

Transformación con map()

JavaScript
Puzzle

Funciones flecha

JavaScript
Test

Selección de elementos DOM

JavaScript
Puzzle

Encapsulación

JavaScript
Test

Mapas con Map

JavaScript
Código

Creación y uso de variables

JavaScript
Puzzle

Polimorfismo

JavaScript
Puzzle

Tipos de datos

JavaScript
Puzzle

Estructuras de control

JavaScript
Puzzle

Todas las lecciones de JavaScript

Accede a todas las lecciones de JavaScript y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Accede GRATIS a JavaScript y certifícate

Certificados de superación de JavaScript

Supera todos los ejercicios de programación del curso de JavaScript y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  1. Comprender el concepto de encapsulación en la programación orientada a objetos.
  2. Conocer las ventajas de aplicar la encapsulación en la organización y protección de la información interna de los objetos.
  3. Aprender cómo implementar la encapsulación en JavaScript utilizando diferentes enfoques como IIFE, clausuras, objetos literales y clases con getters y setters.
  4. Entender la diferencia entre propiedades y métodos públicos y privados, y cómo limitar el acceso a la información interna de los objetos.
  5. Conocer los pros y contras de los enfoques de encapsulación en JavaScript y saber cuándo utilizar cada uno según las necesidades del proyecto.
  6. Saber cómo la encapsulación mejora la modularidad y la mantenibilidad del código, y cómo evita la manipulación involuntaria de datos internos.