Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

191
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda