Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

418
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!