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

226
Visualizações
¿JS ignora el método de los niños si hay una propiedad con el mismo nombre en la clase principal?

Acabo de enfrentar el comportamiento extraño que no entiendo. Puede ejecutar este código usted mismo y ver.

 class Base { get = () => { console.log('i am the Base function'); } } class Child extends Base { get () { console.log('i am the Child function'); } } const child = new Child(); child.get(); // outputs 'i am the Base function'

Se supone que debe ser así? ¿Puedes explicarme por qué? Y la pregunta más importante: ¿cómo superar esto? Todo lo que quiero es anular la propiedad 'obtener' y aún poder acceder a 'obtener' desde la clase principal. No puedo editar la clase base .

De hecho, encontré la solución. Puedo hacer algo como esto:

 class Base { get = () => { console.log('i am the Base function'); } } class Child extends Base { constructor() { super(); this.parentGet = this.get; this.get = () => { console.log('i am the Child function'); this.parentGet(); } } } const child = new Child(); child.get(); // outputs 'i am the Child function' and then 'i am the Base function'

Pero no me parece bien.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Está utilizando la sintaxis del método de instancia en la clase principal. Eso significa que la inicialización de la propiedad ocurrirá en el constructor de la clase principal, por lo que ocultará el método en el prototipo.

Si usa la sintaxis de función normal (método) en el padre, funcionará como espera.

 class Base { get () { console.log('i am the Base function'); } }

Alternativamente, podría hacer lo mismo que su solución al hacer que la propiedad secundaria también sea una propiedad de instancia. Sin embargo, usar una función de flecha como método de clase , que es posible como ha descubierto, es probablemente algo que no debería hacer a menos que realmente comprenda lo que está obteniendo de esa opción.

Para explicar más: en su código Base original, la declaración crea un método de instancia. Eso significa que funciona como si su clase se viera así:

 class Base { constructor() { this.get = () => console.log("i am the Base function"); } }

En otras palabras, la propiedad "get" está directamente en la instancia construida y no en Base.prototype . Por lo tanto, esa propiedad de instancia significa que JavaScript no se molestará en mirar la cadena de prototipos cuando se llame a someObject.get() .

Por lo tanto, la respuesta directa a su pregunta es "no"; JavaScript permite que los métodos de la subclase anulen los métodos de la clase principal a través del funcionamiento normal de la cadena de prototipos. Sin embargo, la respuesta es "sí" cuando la clase principal crea una propiedad de instancia que oculta algo en la cadena de prototipos.

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