es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué JavaScript permite métodos duplicados?

Descubrí hoy que esto parece ser JavaScript legal:

class foo {
   a() { console.log( 'a' ); }
   b() { console.log( 'b' ); }
   a() { console.log( 'a2' ); }
}

( new foo() ).a(); // muestra a2

La función a() se enumera dos veces, pero JavaScript simplemente ignora la primera. ¿Por qué esto es legal? ¿Cuál es un caso de uso significativo para esta “característica”?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Explicación

    Esto es legal en Javascript porque al definir una clase usando la palabra clave class, implícitamente se crea una función constructora y se agregan todos los métodos a su prototipo. Cuando se agregan métodos al prototipo, son simplemente propiedades con una función como valor. Si dos propiedades tienen el mismo nombre, la última definida anulará a las anteriores.

    En el ejemplo proporcionado, cuando se define la clase foo, se ignora la primera definición del método a() y solo se agrega la segunda definición al prototipo. Cuando se crea una instancia de foo y se llama al método a() en ella, se hace referencia a la segunda definición, la cual muestra “a2” en la consola.

    Casos de uso significativos

    Un caso de uso significativo para esta característica podría ser en situaciones donde una clase tiene valores o comportamientos predeterminados que pueden ser anulados por subclases. Por ejemplo, una clase Vehículo podría tener un método conducir() predeterminado, pero las subclases como Coche o Camión pueden anularlo con sus propias implementaciones.

    En tal caso, si la clase base ya tiene un método con el mismo nombre que el definido en la subclase, el método de la subclase lo anulará. Esto permite una mayor flexibilidad y personalización en jerarquías de clases.

Comments are closed.