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

190
Vistas
¿Cómo acceder a los campos privados de la clase principal en JavaScript?

Tengo una clase Heap que tiene un campo de values privados. Esto es bueno ya que no quiero que nadie pueda modificar values directamente.

 class Heap { #values; constructor(array = []) { this.#values = array; } insert(item) { this.#values.push(item); this.#bubbleUp(this.#values.length - 1); } }

Pero ahora me gustaría extender mi clase Heap a una subclase PriorityQueue. En esta clase necesito cambiar la firma de algunos de los métodos (por ejemplo insert ) para que asigne una prioridad a un valor. Sin embargo, no puedo averiguar cómo acceder al campo de values desde la clase base. Por ejemplo, dada la siguiente clase PriorityQueue:

 class PriorityQueue extends Heap { constructor(array = []) { super(array); } insert(item, priority) { // Error: Private field '#values' must be declared in an enclosing class this.#values.push({ item, priority }); this.#bubbleUp(this.#values.length - 1); } }

Recibo un error al intentar insertar un valor en values .

¿Hay alguna forma de evitar este problema? Quiero hacer que un campo sea privado en la clase base, pero aún accesible para la subclase.

¡Gracias!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

No puedo averiguar cómo acceder al campo de values desde la clase base.

Esto no es posible. Privado realmente significa privado en JS. No lo use si desea que el campo sea accesible fuera de la clase.

Quiero hacer que un campo sea privado en la clase base, pero aún accesible para la subclase.

Ese sería un miembro protegido, que JS no admite.

¿Hay alguna forma de evitar este problema?

Bueno, en realidad no necesitas acceder a los .#values . Todo lo que necesita hacer es llamar al método de insert de la clase base:

 class PriorityQueue extends Heap { insert(item, priority) { super.insert({ item, priority }); } }

Me gustaría extender mi clase Heap a una subclase PriorityQueue . En esta clase necesito cambiar la firma de algunos de los métodos (por ejemplo insertar) para que asigne una prioridad a un valor.

Esta es una mala idea. Una subclase no debe cambiar las firmas del método, de lo contrario violará el principio de sustitución de Liskov . En su lugar, use la composición sobre la herencia , donde una cola de prioridad tiene o contiene un montón:

 class PriorityQueue { #heap = new Heap(v => v.priority); // assuming it takes a custom comparator? push(item, priority) { this.#heap.insert({ item, priority }); } pop() { return this.#heap.… } }
about 4 years ago · Juan Pablo Isaza Denunciar
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