Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Trabajando con Propiedades Privadas en Clases | Dominio de las Clases e Herencia en JavaScript
Maestría Avanzada en JavaScript

bookTrabajando con Propiedades Privadas en Clases

En la programación basada en clases, a menudo existen casos en los que se desea limitar el acceso directo a ciertas propiedades para proteger la integridad de los datos y controlar cómo se modifican.

¿Qué son las propiedades privadas?

En JavaScript, las propiedades de clase suelen ser públicas, lo que significa que pueden ser accedidas y modificadas desde fuera de la clase. Sin embargo, existen situaciones en las que es necesario restringir el acceso a ciertas propiedades, asegurando que solo puedan ser accedidas o modificadas dentro de la propia clase. Estas se denominan propiedades privadas.

Las propiedades privadas ayudan a crear un límite claro entre el funcionamiento interno de la clase y el código externo. Son útiles cuando se desea ocultar datos sensibles o evitar cambios no intencionados en una propiedad desde fuera de la clase.

Piénsalo como el motor de un coche. Aunque puedes conducir el coche e interactuar con sus controles, no tienes acceso directo a los componentes del motor mientras conduces. El motor está protegido contra manipulaciones externas, y solo los mecánicos autorizados (métodos de la clase) pueden realizar ajustes.

Cómo declarar y utilizar campos privados en una clase

En JavaScript, las propiedades privadas se declaran utilizando la sintaxis # (introducida en ES2020). Al anteponer un nombre de propiedad con #, se convierte en privada, lo que significa que solo puede ser accedida dentro de la propia clase.

12345678910111213141516171819202122
class Animal { #type; // Declaring a private field constructor(name, type) { this.name = name; this.#type = type; // Assigning a value to the private field } getInfo() { return `${this.name} is a ${this.#type} animal.`; } changeType(newType) { this.#type = newType; // Modifying the private field within the class } } const lion = new Animal('Lion', 'Wild'); console.log(lion.getInfo()); // Output: Lion is a Wild animal // Attempt to access private field directly (this will cause an error) console.log(lion.#type); // Uncaught SyntaxError: Private field '#type' must be declared in an enclosing class
copy

En este ejemplo, #type es un campo privado. No puede ser accedido ni modificado fuera de la clase Animal. Cualquier intento de acceder a #type directamente desde una instancia (como lion.#type) resultará en un error de sintaxis. Esto garantiza que los datos sensibles o críticos solo se modifiquen mediante métodos controlados definidos en la clase.

Beneficios de las propiedades privadas

  1. Las propiedades privadas protegen los datos sensibles al impedir el acceso externo. Garantizan que los datos solo puedan modificarse mediante métodos específicos, reduciendo el riesgo de cambios accidentales o no autorizados;
  2. Las propiedades privadas permiten encapsular detalles de implementación, ocultando la lógica interna al usuario. Esto promueve una separación clara de responsabilidades y mantiene el código modular;
  3. Con las propiedades privadas, se obtiene un control más preciso sobre cómo se accede y modifica la información dentro de una clase, asegurando que las modificaciones se realicen a través de métodos bien definidos.

Ejemplo del mundo real: Cuenta bancaria

Tomemos una analogía del mundo real sobre la gestión de un saldo de cuenta bancaria. En un banco, el saldo de tu cuenta está protegido y nadie puede acceder o modificarlo directamente. Solo puedes interactuar con él a través de procesos autorizados como depósitos y retiros. De manera similar, podemos utilizar propiedades privadas en una clase para proteger el campo de saldo y evitar que sea accedido o modificado directamente.

12345678910111213141516171819202122232425262728293031323334353637
class BankAccount { #balance; // Private field constructor(owner, initialBalance) { this.owner = owner; this.#balance = initialBalance; } // Method to deposit money deposit(amount) { if (amount > 0) { this.#balance += amount; } } // Method to withdraw money withdraw(amount) { if (amount > 0 && amount <= this.#balance) { this.#balance -= amount; } } // Method to get account balance getBalance() { return `Account balance for ${this.owner}: $${this.#balance}`; } } const account = new BankAccount('John', 1000); account.deposit(500); console.log(account.getBalance()); // Output: Account balance for John: $1500 account.withdraw(200); console.log(account.getBalance()); // Output: Account balance for John: $1300 // Direct access to balance is not allowed console.log(account.#balance); // SyntaxError: Private field '#balance' must be declared in an enclosing class
copy

En este ejemplo, el campo #balance es privado y solo puede ser accedido mediante métodos públicos como deposit, withdraw y getBalance. Esto garantiza que el saldo se modifique de manera controlada, protegiéndolo de accesos o manipulaciones no autorizadas.

1. ¿Cuál es la razón principal para utilizar propiedades privadas en una clase?

2. ¿Cómo se declara una propiedad privada?

3. ¿Qué sucede si intentas acceder a una propiedad privada desde fuera de una clase?

question mark

¿Cuál es la razón principal para utilizar propiedades privadas en una clase?

Select the correct answer

question mark

¿Cómo se declara una propiedad privada?

Select the correct answer

question mark

¿Qué sucede si intentas acceder a una propiedad privada desde fuera de una clase?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 7

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 2.22

bookTrabajando con Propiedades Privadas en Clases

Desliza para mostrar el menú

En la programación basada en clases, a menudo existen casos en los que se desea limitar el acceso directo a ciertas propiedades para proteger la integridad de los datos y controlar cómo se modifican.

¿Qué son las propiedades privadas?

En JavaScript, las propiedades de clase suelen ser públicas, lo que significa que pueden ser accedidas y modificadas desde fuera de la clase. Sin embargo, existen situaciones en las que es necesario restringir el acceso a ciertas propiedades, asegurando que solo puedan ser accedidas o modificadas dentro de la propia clase. Estas se denominan propiedades privadas.

Las propiedades privadas ayudan a crear un límite claro entre el funcionamiento interno de la clase y el código externo. Son útiles cuando se desea ocultar datos sensibles o evitar cambios no intencionados en una propiedad desde fuera de la clase.

Piénsalo como el motor de un coche. Aunque puedes conducir el coche e interactuar con sus controles, no tienes acceso directo a los componentes del motor mientras conduces. El motor está protegido contra manipulaciones externas, y solo los mecánicos autorizados (métodos de la clase) pueden realizar ajustes.

Cómo declarar y utilizar campos privados en una clase

En JavaScript, las propiedades privadas se declaran utilizando la sintaxis # (introducida en ES2020). Al anteponer un nombre de propiedad con #, se convierte en privada, lo que significa que solo puede ser accedida dentro de la propia clase.

12345678910111213141516171819202122
class Animal { #type; // Declaring a private field constructor(name, type) { this.name = name; this.#type = type; // Assigning a value to the private field } getInfo() { return `${this.name} is a ${this.#type} animal.`; } changeType(newType) { this.#type = newType; // Modifying the private field within the class } } const lion = new Animal('Lion', 'Wild'); console.log(lion.getInfo()); // Output: Lion is a Wild animal // Attempt to access private field directly (this will cause an error) console.log(lion.#type); // Uncaught SyntaxError: Private field '#type' must be declared in an enclosing class
copy

En este ejemplo, #type es un campo privado. No puede ser accedido ni modificado fuera de la clase Animal. Cualquier intento de acceder a #type directamente desde una instancia (como lion.#type) resultará en un error de sintaxis. Esto garantiza que los datos sensibles o críticos solo se modifiquen mediante métodos controlados definidos en la clase.

Beneficios de las propiedades privadas

  1. Las propiedades privadas protegen los datos sensibles al impedir el acceso externo. Garantizan que los datos solo puedan modificarse mediante métodos específicos, reduciendo el riesgo de cambios accidentales o no autorizados;
  2. Las propiedades privadas permiten encapsular detalles de implementación, ocultando la lógica interna al usuario. Esto promueve una separación clara de responsabilidades y mantiene el código modular;
  3. Con las propiedades privadas, se obtiene un control más preciso sobre cómo se accede y modifica la información dentro de una clase, asegurando que las modificaciones se realicen a través de métodos bien definidos.

Ejemplo del mundo real: Cuenta bancaria

Tomemos una analogía del mundo real sobre la gestión de un saldo de cuenta bancaria. En un banco, el saldo de tu cuenta está protegido y nadie puede acceder o modificarlo directamente. Solo puedes interactuar con él a través de procesos autorizados como depósitos y retiros. De manera similar, podemos utilizar propiedades privadas en una clase para proteger el campo de saldo y evitar que sea accedido o modificado directamente.

12345678910111213141516171819202122232425262728293031323334353637
class BankAccount { #balance; // Private field constructor(owner, initialBalance) { this.owner = owner; this.#balance = initialBalance; } // Method to deposit money deposit(amount) { if (amount > 0) { this.#balance += amount; } } // Method to withdraw money withdraw(amount) { if (amount > 0 && amount <= this.#balance) { this.#balance -= amount; } } // Method to get account balance getBalance() { return `Account balance for ${this.owner}: $${this.#balance}`; } } const account = new BankAccount('John', 1000); account.deposit(500); console.log(account.getBalance()); // Output: Account balance for John: $1500 account.withdraw(200); console.log(account.getBalance()); // Output: Account balance for John: $1300 // Direct access to balance is not allowed console.log(account.#balance); // SyntaxError: Private field '#balance' must be declared in an enclosing class
copy

En este ejemplo, el campo #balance es privado y solo puede ser accedido mediante métodos públicos como deposit, withdraw y getBalance. Esto garantiza que el saldo se modifique de manera controlada, protegiéndolo de accesos o manipulaciones no autorizadas.

1. ¿Cuál es la razón principal para utilizar propiedades privadas en una clase?

2. ¿Cómo se declara una propiedad privada?

3. ¿Qué sucede si intentas acceder a una propiedad privada desde fuera de una clase?

question mark

¿Cuál es la razón principal para utilizar propiedades privadas en una clase?

Select the correct answer

question mark

¿Cómo se declara una propiedad privada?

Select the correct answer

question mark

¿Qué sucede si intentas acceder a una propiedad privada desde fuera de una clase?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 7
some-alt