Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

202
Vistas
¿Cómo se implementan correctamente los métodos de instancia de una función constructora?

Se proporciona la siguiente función de constructor y el código de registro...

 function Car(brand, year, model, color, utilidad) { this.brand = brand; this.year = year; this.model = model; this.color = color; this.utilidad = utilidad; this.useFor = (prmt) => { this.utilidad.push(prmt); } }; const toyota = new Car("Toyota", 2021, "Prado", "Red", "city"); toyota.useFor('mountain'); console.log(toyota);

En lugar de obtener los datos de registro esperados, el código se rompe con el siguiente mensaje...

 TypeError: "this.utilidad.push is not a function"

¿Por qué pasó esto?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

porque * .push () se usa para insertar datos en una matriz, pero coloca la cadena "ciudad" en el parámetro predeterminado;

about 4 years ago · Juan Pablo Isaza Denunciar

0

Del comentario anterior...

"El OP no construyó un prototipo, pero estaba implementando una función que está destinada a ser utilizada como constructor para crear instancias de Car . Además, el OP está inicializando toyota con un argumento de utilidad escrito incorrectamente que se supone que es una matriz y no una cadena para permitir que el método useFor se inserte más tarde en la propiedad de utilidad del objeto".

Por lo tanto, una implementación Car refactorizada internamente podría usar valores iniciales o predeterminados para valores de argumentos omitidos. Podría introducir alguna verificación de tipo formal para no romper con TypeError debido a tipos de argumentos proporcionados incorrectamente. Y además de las tareas de asignar los argumentos como propiedades propias a un objeto, implementa su único método en el prototype de la función constructora...

 function Car( brand = 'unknown', year = 'not provided', model = 'unknown', color = 'not provided', utilidad = [], ) { return Object.assign(this, { brand, year, model, color, utilidad: Array.isArray(utilidad) ? utilidad : [utilidad], }); }; Car.prototype.useFor = function useFor (value) { this.utilidad.push(value); }; const dummy = new Car(); const toyota = new Car('Toyota', 2021, 'Prado', 'Red', 'city'); dummy.useFor('test field'); toyota.useFor('mountain'); console.log({ dummy, toyota });
 .as-console-wrapper { min-height: 100%!important; top: 0; }

La próxima iteración podría introducir la sintaxis de clase y un constructor que espera una sola configuración u argumento de opciones...

 class Car { constructor({ brand = 'unknown', year = 'not provided', model = 'unknown', color = 'not provided', utilidad = [], }) { Object.assign(this, { brand, year, model, color, utilidad: Array.isArray(utilidad) ? utilidad : [utilidad], }); } // prototype method(s) useFor(value) { this.utilidad.push(value); } } const dummy = new Car({}); const toyota = new Car({ brand: 'Toyota', year: 2021, model: 'Prado', color: 'Red', utilidad: 'city', }); dummy.useFor('test field'); toyota.useFor('mountain'); console.log({ dummy, toyota });
 .as-console-wrapper { min-height: 100%!important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda