Tengo un constructor de JavaScript como este:
function Box(obj) { this.obj = obj; }que quiero pasar un objeto como un parámetro como este:
var box = new Box({prop1: "a", prop2: "b", prop3: "c"})y me da algo como esto:
box.obj.prop1 box.obj.prop2 box.obj.prop3pero me gustaría que las propiedades estén directamente en el objeto de esta manera:
box.prop1 box.prop2 box.prop3Sé que podría hacer algo como esto:
function Box(obj) { this.prop1 = obj.prop1; this.prop2 = obj.prop2; this.prop3 = obj.prop3; } Pero eso no es bueno porque entonces mi constructor tendría que "saber" antes los nombres de las propiedades del parámetro del objeto. Lo que me gustaría es poder pasar diferentes objetos como parámetros y asignar sus propiedades directamente como propiedades del nuevo objeto personalizado creado por el constructor para obtener box.propX y no box.obj.propX . Espero estar siendo claro, tal vez estoy midiendo algo muy obvio, pero soy un novato, ¡así que necesito su ayuda!
Gracias por adelantado.
Podrías hacer esto. Probablemente también haya una forma jquery ...
function Box(obj) { for (var fld in obj) { this[fld] = obj[fld]; } }Puede incluir una prueba para hasOwnProperty si tiene (creo que tontamente) un objeto extendido
function Box(obj) { for (var fld in obj) { if (obj.hasOwnProperty(fld)) { this[fld] = obj[fld]; } } }Editar
¡Ah, ja! es jQuery.extend
Entonces, la forma jQuery es:
function Box(obj) { $.extend(this, obj); }Simplemente pon esto en tu constructor.
for (var prop in obj) { if (obj.hasOwnProperty(prop)) { this[prop] = obj[prop]; } }muy corto
function Box(obj) { Object.assign(this, obj); }