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

119
Visualizações
Function.prototype.call on class para hacer herencia dinámica

Hola,

Estoy tratando de hacer algo con function.prototype.call para asegurar una herencia dinámica.

Aquí hay un ejemplo básico de lo que estoy tratando de hacer:

 class Person { constructor(name, test) { this.name = name; this.test = test; } } class Police { constructor(name, badge, ...manyArgs) { //Attempt 1: Person.call(this, name, 'hello world'); //I also tried: Person.constructor.call(this, name, 'hello world'); console.log(this.test); //This should print a log message of 'hello world' } }

El primer intento no funciona porque una clase no es una función y solo las funciones tienen el método de llamada en su prototipo. El segundo intento no arroja un error, pero simplemente no hereda el valor de prueba establecido en Person .

Algo que funciona es si cambiaría la clase Person a:

 function Person(name, test) { this.name = name; this.test = test; }

Pero desafortunadamente no tengo el lujo de cambiar el código de la clase que estoy tratando de heredar de esta manera.

He buscado mucho en línea, pero no pude encontrar por qué la función de call no funcionaría para class basadas en clases. Es confuso para mí porque puede reescribir fácilmente class basadas en clases en clases basadas en function .

¿Alguien tiene una idea de cómo usar el método prototype.call para heredar una clase?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Los constructores de clases en JavaScript solo se pueden llamar con new , Reflect.construct o super en una extensión de clase. Esto refuerza y estandariza las técnicas de construcción de alternativas utilizando objetos de function ordinaria.

Aunque los objetos class son funciones y heredan un método de call , intentar usar className.call(...) generará un error similar a

TypeError: los constructores de clase deben invocarse con 'nuevo'

Primera respuesta: como resultado de lo anterior, no podrá llamar al constructor de una clase usando `Function.prototype.call'.


Como se menciona en los comentarios, la extensión de una clase base es una alternativa a la creación de una función constructora, pero cuando se escribe como una declaración de clase no proporciona una herencia dinámica.

Sin embargo, esto no le impide extender dinámicamente una expresión de clase escrita dentro de una función de fábrica. Como ejemplo:

 class Person { constructor(name, test) { this.name = name; this.test = test; } } // factory function: function policeExtend(baseClass) { return class Police extends baseClass { constructor(name, badge) { super(name, "'just testing'"); this.badge = badge; } }; } const PolicePerson = policeExtend(Person); let officer = new PolicePerson("chief", 100); console.log( officer.name, officer.badge, officer.test)

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