Tengo un constructor de JavaScript así:¿Pasar el objeto como parámetro a la función del constructor y copiar sus propiedades al nuevo objeto?
function Box(obj) {
this.obj = obj;
}
la que quiero pasar un objeto como un parámetro de la siguiente manera:
var box = new Box({prop1: "a", prop2: "b", prop3: "c"})
y me da algo como esto:
box.obj.prop1
box.obj.prop2
box.obj.prop3
pero me gustaría que las propiedades estén directamente en el objeto como este:
box.prop1
box.prop2
box.prop3
Sé 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 de que 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 ser claro, tal vez estoy midiendo algo muy obvio pero soy novato así que por favor necesito tu ayuda!
Gracias de antemano.
Una cosa observar que ninguna de las soluciones está haciendo una copia _deep_. Dependiendo de su implementación _actual_, existe la posibilidad de que surjan problemas. Por ejemplo, si en lugar de pasar su objeto de forma anónima crea una variable 'obj = {prop1: ..., propDanger: {a: 1, b: 2}}' y la pasa a su constructor 'var box = new Box (obj) ', luego edita a' obj.propDanger.a' también cambiará 'box.propDanger.a'. –
@Brett Buen punto. Rara vez es un problema, pero es bueno saberlo para que no te sorprenda cuando ocurra. – Hemlock