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

426
Visualizações
¿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 Respostas
Responde à pergunta

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