Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

135
Vistas
¿Cómo accedería o anularía una propiedad privada de una clase base dentro de una declaración de clase derivada?

¿Cómo harías esto sin:

  • exponer públicamente la propiedad privada de la clase base a través de setters y getters como en esta respuesta
  • o tener que duplicar cualquier método y propiedad relevante de la clase base en la clase derivada

Las propiedades deben permanecer verdaderamente privadas, excepto dentro de la declaración de clase derivada, por lo que no puede usar la convención de subrayado de variable protegida _ .

Supongamos que tengo el siguiente código

 class CoffeeMachine { #waterLimit = 600; #waterAmount = 0; constructor() {} set waterAmount(amount) { if (amount < 0) { this.#waterAmount = 0; } else if (amount > this.#waterLimit) { this.#waterAmount = this.#waterLimit; } else { this.#waterAmount = amount; } } get waterAmount() { return this.#waterAmount; } } class TeaMachine extends CoffeeMachine { constructor() { super(); } }

Me gustaría que la TeaMachine fuera más pequeña, así que quiero que sea #waterLimit igual a 400 en lugar de 600

Simplemente hacer lo siguiente no funciona

 class TeaMachine extends CoffeeMachine { #waterLimit = 400; constructor() { super(); } } const teaBox = new TeaMachine(); teaBox.waterAmount = 1000; console.log(teaBox.waterAmount); // 600

Esto es lo más cerca que pude estar

El límite de agua se establece en el inicio, pero ya no es accesible después. Aunque obviamente esta no es una solución perfecta.

 class CoffeeMachine { #waterLimit; #waterAmount = 0; constructor(limit = 600) { this.#waterLimit = limit; } } class TeaMachine extends CoffeeMachine { constructor() { super(400); } } const teaBox = new TeaMachine(); teaBox.waterAmount = 1000; console.log(teaBox.waterAmount); // 400

Creo que esto es posible en Java

¿Es posible hacer esto en JavaScript mientras se cumplen las condiciones mencionadas anteriormente? ¿O tendré que aceptar las restricciones del idioma / seguir la ruta de WeakMap ?

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda