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

222
Vistas
¿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 Respuestas
Responde la pregunta

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 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