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

307
Visualizações
¿Cómo crear un método que cree una nueva instancia de la clase?

Tengo la clase Bmw extendida de la clase Car que creé antes, ahora necesito crear un método createNewBmwCar dentro de la class Bmw que creará una nueva instancia de la clase Bmw ...

 class Bmw extends Car { constructor(options) { this._model = options.model; this._year = options.year; this._price = options.price; } static createNewBmwCar() { // return FIXME: let newCar = new Bmw(); } }

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

0

Deberá crear una instancia de Bmw en este método static :

 class Car {}; class Bmw extends Car { constructor(options) { super(options); this._model = options.model; this._year = options.year; this._price = options.price; } static createNewBmwCar(options) { return new Bmw({ model: "BMW", year: options.year, price: options.price }); } } let myBMW = Bmw.createNewBmwCar({ year: 2020, price: "1$" }); console.log(myBMW);

about 4 years ago · Juan Pablo Isaza Relatório

0

El problema no es el método static , es el constructor. Los constructores derivados deben llamar a super() , y deben hacerlo antes de poder usar this .

Si soluciona eso y agrega los parámetros necesarios para createNewBmwCar , funciona (pero siga leyendo):

 class Car { } class Bmw extends Car { constructor(options) { super(); // <========= this._model = options.model; this._year = options.year; this._price = options.price; } static createNewBmwCar(options) { let newCar = new Bmw(options); return newCar; } } const beemer = Bmw.createNewBmwCar({ model: "fancy", year: "recent", price: "lots", }); console.log(beemer._model); // "fancy"

Tiene una segunda opción que puede ser más flexible: puede usar this en lugar de Bmw en el método static , ya que se referirá al constructor en el que llama al método estático:

 static createNewBmwCar(options) { let newCar = new this(options); // ^^^^ return newCar; } 

 class Car { } class Bmw extends Car { constructor(options) { super(); // <========= this._model = options.model; this._year = options.year; this._price = options.price; } static createNewBmwCar(options) { let newCar = new Bmw(options); return newCar; } } const beemer = Bmw.createNewBmwCar({ model: "fancy", year: "recent", price: "lots", }); console.log(beemer._model); // "fancy"

Eso tiene la ventaja de que si crea una subclase de Bmw y luego llama al método static en la subclase, obtendrá una instancia de la subclase, en lugar de un Bmw :

 class Car { } class Bmw extends Car { constructor(options) { super(); // <========= this._model = options.model; this._year = options.year; this._price = options.price; } static createNewBmwCar(options) { let newCar = new this(options); return newCar; } } class BmwSpecial extends Bmw { } const beemer = BmwSpecial.createNewBmwCar({ model: "fancy", year: "recent", price: "lots", }); console.log(beemer instanceof BmwSpecial); // true, would be false with the earlier version

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