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

420
Vistas
¿ECMAScript 6 tiene una convención para clases abstractas?

Me sorprendió que no pudiera encontrar nada sobre clases abstractas cuando leía en ES6. (Por "clase abstracta" me refiero al significado de Java, en el que una clase abstracta declara firmas de métodos que una subclase debe implementar para ser instanciable).

¿Alguien sabe de alguna convención que se haya establecido para implementar clases abstractas en ES6? Sería bueno poder detectar una violación de clase abstracta con análisis estático.

Si tuviera que generar un error en tiempo de ejecución para indicar un intento de instanciación de clase abstracta, ¿cuál sería el error?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

ES2015 no tiene clases de estilo Java con posibilidades integradas para su patrón de diseño deseado. Sin embargo, tiene algunas opciones que pueden ser útiles, dependiendo exactamente de lo que esté tratando de lograr.

Si desea una clase que no se puede construir, pero cuyas subclases sí, puede usar new.target :

 class Abstract { constructor() { if (new.target === Abstract) { throw new TypeError("Cannot construct Abstract instances directly"); } } } class Derived extends Abstract { constructor() { super(); // more Derived-specific stuff here, maybe } } const a = new Abstract(); // new.target is Abstract, so it throws const b = new Derived(); // new.target is Derived, so no error

Para obtener más detalles sobre new.target , puede leer esta descripción general de cómo funcionan las clases en ES2015: http://www.2ality.com/2015/02/es6-classes-final.html

Si está buscando específicamente que se requiera la implementación de ciertos métodos, también puede verificarlo en el constructor de la superclase:

 class Abstract { constructor() { if (this.method === undefined) { // or maybe test typeof this.method === "function" throw new TypeError("Must override method"); } } } class Derived1 extends Abstract {} class Derived2 extends Abstract { method() {} } const a = new Abstract(); // this.method is undefined; error const b = new Derived1(); // this.method is undefined; error const c = new Derived2(); // this.method is Derived2.prototype.method; no error
over 4 years ago · Santiago Trujillo 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