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

124
Vistas
¿Puedo editar una función de constructor en javaScript para agregar propiedades?

Tengo esta función constructora básica (con dos entradas)

function Person(firstName, lastName) { this.firstName = firstName; this.lastName = lastName; }

Para crear un objeto con la función constructora Persona , hago

var person1 = new Person("John", "Doe");

la salida es

si quiero agregar una nueva propiedad al objeto persona1 ( edad , por ejemplo), lo hago

 person1.age = 20;

y la salida es

ahora, quiero crear un nuevo objeto con la misma función de constructor... digamos person2 . Como sé su edad, también quiero agregar esta información al objeto. lo hago asi

 var person2 = new Person("Jennifer", "Unknown", 30);

la salida es

la salida viene sin la propiedad de edad , porque la función constructora Person no lo sabe

Para crear el objeto person2 con esas 3 entradas usando Person , debo redefinir Person (con esas 3 entradas) y recrear person2 , pasando esas 3 informaciones o agregar la información adicional si el objeto ya existe...

Mi pregunta es:

¿Cómo proceder, si quiero agregar un tercer objeto con Persona ( persona3 ), pasando 4 entradas ( nombre , apellido , edad , nacionalidad )? ¿Tengo que redefinir Person (nuevamente) y luego crear person3 ? ... ¡Esto parece un trabajo tedioso y sin lógica! ¡Confieso que soy un novato en jS!

¿Hay alguna forma de editar una función de constructor sin redefinirla cada vez que quiero crear un nuevo objeto con propiedades adicionales? ¿Puedo agregar una nueva propiedad a las funciones de un constructor sin redefinirla? ¿Y si quiero editar una función constructora para agregar un método? por ejemplo:

 status = function(){ alert(this.firstName + " " + this. lastName + " " + ", a person with" + " " + this. age + " " + "years old" + " " + "was found nearby doing jS stuff!" )}

resumiendo... mi objetivo es:

Comienzo con start y quiero terminar con end sin redefinir Person , solo editándolo.

Mi pregunta tiene sentido? Agradezco cualquier consejo.

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

0

Bueno, no existe tal cosa como "editar" una función, pero puede reutilizar la implementación anterior para definir su nueva función en lugar de reescribirla por completo.

 function Person(firstName, lastName) { this.firstName = firstName this.lastName = lastName } Person.prototype.speak = function () { console.log('hey!') } p1 = new Person('first1', 'last1') console.log('p1 firstName', p1.firstName) p1.speak() // hey! // store old prototype object oldPrototype = Person.prototype Person = function (firstName, lastName, age) { // call the old constructor to initialize with existing properties oldPrototype.constructor.call(this, firstName, lastName) // assign new properties this.age = age // assign a new default property this.otherProp = 'new prop' } // copy over the old prototype to the new Person Person.prototype = oldPrototype p2 = new Person('first2', 'last2', 10) console.log('p2 firstName', p2.firstName) console.log('p2 new properties', p2.age, p2.otherProp) // 10 and 'new prop' p2.speak() // should work! because we already copied the old prototype object over // it will not affect any of the old Person instances that were initialized before console.log('p1 age', p1.age) // undefined console.log('p1 otherProp', p1.otherProp) // undefined

Si bien esto es posible, ¡no lo use en exceso!

Porque parece un antipatrón para anular una función constructor . Debería crear una nueva constructor function extendiendo su Person en su lugar.

Leer más sobre Herencia en JavaScript

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