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

356
Vistas
¿Por qué es subclase [clase (anónimo)]

Dado el ejemplo a continuación, ¿podría alguien indicar por qué mi clase C se muestra como anónima? Estoy tratando de validar la instancia de BC y siempre es falsa :(

Gracias de antemano.

 class A { constructor() { this.a = 1 } }; class B extends A { constructor() { super(); this.a = 2; } } BC = class extends B { constructor() { super(); this.a = 3; } } console.log(A, B, BC) //[class A], [class B extends A], [class (anonymous) extends B] let test = new BC(); console.log(test instanceof BC) //false console.log(test.constructor.name) //''
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

En la mayoría de las situaciones, al asignar una expresión de class anónima a algo (una variable, una propiedad en un inicializador de objeto, el nombre del parámetro si se usa una expresión de class como valor predeterminado del parámetro, ...) se asigna el nombre del objeto al clase. Ejemplo:

 const A = class {}; console.log(A.name); // "A" const obj = { B: class {}, }; console.log(obj.B.name); // "B" function example(C = class {}) { console.log(C.name); // "C" } example();

Pero hay una excepción específica para cuando agrega una propiedad a un objeto existente . Eso fue considerado un riesgo de seguridad por TC39 (imagínese que está almacenando una clase/función que le va a dar a un código que no es de confianza usando una clave que debe ser privada para su código y no expuesta al de ellos), por lo que es uno de los muy pocos lugares que no sucede:

 const obj = {}; obj.A = class {}; console.log(obj.A.name); // ""

Si desea que BC tenga un nombre, asígnele uno de forma explícita:

 BC = class SomeNameHere extends B { // ...

Lo mismo es cierto para las expresiones de funciones anónimas, consulte mi respuesta aquí para obtener más información al respecto.


En un comentario sobre la respuesta que has dicho:

... Sin embargo, la validación de la instancia aún se muestra como falsa. ¿Alguna sugerencia sobre lo que está causando esto?...

Eso no sucederá con el código de la pregunta, independientemente de si BC tiene un nombre. instanceof funciona bien de cualquier manera:

 class A { constructor() { this.a = 1; } } class B extends A { constructor() { super(); this.a = 2; } } // With a name BC = class BC extends B { constructor() { super(); this.a = 3; } }; // Without a name BD = class extends B { constructor() { super(); this.a = 3; } }; console.log(A, B, BC); // [class A], [class B extends A], [class (anonymous) extends B] let test = new BC(); console.log(test instanceof BC); // true console.log(test.constructor.name); // "BC" let test2 = new BD(); console.log(test2 instanceof BD); // true console.log(test2.constructor.name); // ""
 .as-console-wrapper { max-height: 100% !important; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Su última clase es anónimo, porque nunca le da el nombre C. Simplemente crea una propiedad llamada C que contiene la clase anónimo.

Creo que la sintaxis de lo que espera se vería así:

 ... class C extends B { constructor() { super(); this.a = 3; } } var B = new B(); BC = new C();

De esta manera, está definiendo una nueva clase llamada C y agrega una nueva propiedad también llamada C a B y la llena con una instancia de C.

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