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

bookDesafío: Implementar Propiedades Privadas en una Clase

Tarea

Se está creando una clase BankAccount para gestionar las cuentas bancarias de los usuarios de forma segura. Cada cuenta tiene un propietario y un saldo, pero se desea que el saldo esté protegido contra el acceso directo. El objetivo es utilizar propiedades privadas para evitar modificaciones no intencionadas del saldo, permitiendo el acceso controlado a través de métodos.

  1. Propiedad privada de saldo:
    • Dentro de la clase BankAccount, declarar una propiedad privada #balance.
  2. Constructor:
    • El constructor debe aceptar owner e initialBalance como parámetros;
    • Asignar owner a una propiedad pública y initialBalance a la propiedad privada #balance.
  3. Agregar métodos:
    • deposit: Definir un método que reciba amount como parámetro. Si la cantidad es mayor que 0, debe sumar amount a #balance;
    • withdraw: Definir un método que reciba amount como parámetro. Si la cantidad es mayor que 0 y menor o igual a #balance, debe restar amount de #balance;
    • getBalance: Definir un método que devuelva una cadena con el nombre del propietario y el saldo de la cuenta, por ejemplo, "Account balance for John: $1500".
123456789101112131415161718192021222324252627282930313233343536
class BankAccount { #_____; // Declare private property constructor(owner, initialBalance) { this._____ = owner; this.#_____ = initialBalance; } deposit(_____) { if (_____) { this.#_____ += _____; } } withdraw(_____) { if (_____ && _____) { this.#_____ -= _____; } } getBalance() { return `Account balance for ${this._____}: $${this.#_____}`; } } // Testing const account1 = new BankAccount('Alice', 1000); account1.deposit(500); console.log(account1.getBalance()); // Expected: Account balance for Alice: $1500 account1.withdraw(300); console.log(account1.getBalance()); // Expected: Account balance for Alice: $1200 // Attempt direct access (should cause an error) // console.log(account1.#balance);
copy
  • Declarar una propiedad privada #balance en la clase BankAccount;
  • En el constructor, asignar owner a una propiedad pública y initialBalance a la propiedad privada #balance;
  • Definir un método deposit que reciba amount como parámetro. Comprobar si amount es mayor que 0, luego sumar amount a #balance;
  • Definir un método withdraw que reciba amount como parámetro. Comprobar si amount es mayor que 0 y menor o igual a #balance, luego restar amount de #balance;
  • Definir un método getBalance que devuelva una cadena con el nombre del propietario y el saldo de la cuenta.
123456789101112131415161718192021222324252627282930313233343536
class BankAccount { #balance; // Declare private property constructor(owner, initialBalance) { this.owner = owner; this.#balance = initialBalance; } deposit(amount) { if (amount > 0) { this.#balance += amount; } } withdraw(amount) { if (amount > 0 && amount <= this.#balance) { this.#balance -= amount; } } getBalance() { return `Account balance for ${this.owner}: $${this.#balance}`; } } // Testing const account1 = new BankAccount('Alice', 1000); account1.deposit(500); console.log(account1.getBalance()); // Output: Account balance for Alice: $1500 account1.withdraw(300); console.log(account1.getBalance()); // Output: Account balance for Alice: $1200 // Attempt direct access (should cause an error) // console.log(account1.#balance);
copy

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 8

Pregunte a AI

expand

Pregunte a AI

ChatGPT

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

Suggested prompts:

Can you explain how private properties work in JavaScript classes?

What happens if I try to access the #balance property directly from outside the class?

Can you show how to add error handling for invalid deposit or withdrawal amounts?

Awesome!

Completion rate improved to 2.22

bookDesafío: Implementar Propiedades Privadas en una Clase

Desliza para mostrar el menú

Tarea

Se está creando una clase BankAccount para gestionar las cuentas bancarias de los usuarios de forma segura. Cada cuenta tiene un propietario y un saldo, pero se desea que el saldo esté protegido contra el acceso directo. El objetivo es utilizar propiedades privadas para evitar modificaciones no intencionadas del saldo, permitiendo el acceso controlado a través de métodos.

  1. Propiedad privada de saldo:
    • Dentro de la clase BankAccount, declarar una propiedad privada #balance.
  2. Constructor:
    • El constructor debe aceptar owner e initialBalance como parámetros;
    • Asignar owner a una propiedad pública y initialBalance a la propiedad privada #balance.
  3. Agregar métodos:
    • deposit: Definir un método que reciba amount como parámetro. Si la cantidad es mayor que 0, debe sumar amount a #balance;
    • withdraw: Definir un método que reciba amount como parámetro. Si la cantidad es mayor que 0 y menor o igual a #balance, debe restar amount de #balance;
    • getBalance: Definir un método que devuelva una cadena con el nombre del propietario y el saldo de la cuenta, por ejemplo, "Account balance for John: $1500".
123456789101112131415161718192021222324252627282930313233343536
class BankAccount { #_____; // Declare private property constructor(owner, initialBalance) { this._____ = owner; this.#_____ = initialBalance; } deposit(_____) { if (_____) { this.#_____ += _____; } } withdraw(_____) { if (_____ && _____) { this.#_____ -= _____; } } getBalance() { return `Account balance for ${this._____}: $${this.#_____}`; } } // Testing const account1 = new BankAccount('Alice', 1000); account1.deposit(500); console.log(account1.getBalance()); // Expected: Account balance for Alice: $1500 account1.withdraw(300); console.log(account1.getBalance()); // Expected: Account balance for Alice: $1200 // Attempt direct access (should cause an error) // console.log(account1.#balance);
copy
  • Declarar una propiedad privada #balance en la clase BankAccount;
  • En el constructor, asignar owner a una propiedad pública y initialBalance a la propiedad privada #balance;
  • Definir un método deposit que reciba amount como parámetro. Comprobar si amount es mayor que 0, luego sumar amount a #balance;
  • Definir un método withdraw que reciba amount como parámetro. Comprobar si amount es mayor que 0 y menor o igual a #balance, luego restar amount de #balance;
  • Definir un método getBalance que devuelva una cadena con el nombre del propietario y el saldo de la cuenta.
123456789101112131415161718192021222324252627282930313233343536
class BankAccount { #balance; // Declare private property constructor(owner, initialBalance) { this.owner = owner; this.#balance = initialBalance; } deposit(amount) { if (amount > 0) { this.#balance += amount; } } withdraw(amount) { if (amount > 0 && amount <= this.#balance) { this.#balance -= amount; } } getBalance() { return `Account balance for ${this.owner}: $${this.#balance}`; } } // Testing const account1 = new BankAccount('Alice', 1000); account1.deposit(500); console.log(account1.getBalance()); // Output: Account balance for Alice: $1500 account1.withdraw(300); console.log(account1.getBalance()); // Output: Account balance for Alice: $1200 // Attempt direct access (should cause an error) // console.log(account1.#balance);
copy

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

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