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

199
Views
Llamar al constructor de la clase principal en el método estático de la clase secundaria

Tengo un problema al llamar a super dentro del método estático secundario.

 const _todos = []; class Todo { constructor(title) { this.title = title; this.id = Math.round(Math.random() * 100); _todos.push({title, id: this.id}); console.log(`Todo ID: ${this.id}. DONT FORGET IT!`); } static TodoerVersion = '1.8'; static removeTodo(id) { const todoIndex = _todos.findIndex(t => t.id == id); _todos.splice(todoIndex, 1); } } class TodoV2 extends Todo { static addTodo(title) { super(title); } static addDescription(todo, description) { todo.description = description; } static TodoerVersion = '2.0'; }; new TodoV2("play guitar");

Por que no funciona? Pero si llamo a super en el método normal, funcionaría bien.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

super solo se puede llamar dentro de la función constructora de una clase.

Dos respuestas para ti:

  1. La pregunta que realmente hiciste.

  2. Lo que creo que deberías hacer en su lugar. :-)

Respondiendo a la pregunta que hiciste:

JavaScript es muy especial en este sentido: this tiene un significado en los métodos static (siempre que los llame correctamente, por ejemplo, TodoV2.addTodo("title") ): es la función constructora en la que llamó al método estático. Y una función constructora de subclase hereda de su función constructora de superclase (sí, en serio). Entonces puede acceder a la función constructora para la clase principal usando Object.getPrototypeOf(this) en el método static :

 // This is something unusual that JavaScript actually does support static addTodo(title) { const ctor = Object.getPrototypeOf(this); return new ctor(title); }

Para manejar el caso en el que el usuario puede haber llamado a addTodo de una manera que no establece this , puede hacer algo como esto para TodoV2 de forma predeterminada si this está undefined :

 static addTodo(title) { const ctor = Object.getPrototypeOf(this ?? TodoV2); return new ctor(title); }

Lo que creo que deberías hacer en su lugar

No deberías usar un método estático para esto. En su lugar, defina un constructor para TodoV2 :

 class TodoV2 extends Todo { constructor(title, description) { super(title); this.description = description ?? ""; } static addTodo(title) { // Why no `description`? return new this(title); // Or `new TodoV2(title)` } }

También puede consultar el patrón Symbol.species si desea que las subclases creen instancias de superclases.

about 4 years ago · Juan Pablo Isaza 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!