Ho un costruttore di JavaScript come questo:Passare oggetto come parametro alla funzione di costruzione e copiare le sue proprietà nel nuovo oggetto?
function Box(obj) {
this.obj = obj;
}
che voglio passare un oggetto come un parametro come questo:
var box = new Box({prop1: "a", prop2: "b", prop3: "c"})
e mi dà qualcosa di simile:
box.obj.prop1
box.obj.prop2
box.obj.prop3
ma vorrei che le proprietà fossero direttamente sull'oggetto in questo modo:
box.prop1
box.prop2
box.prop3
So che potrei fare qualcosa di simile:
function Box(obj) {
this.prop1 = obj.prop1;
this.prop2 = obj.prop2;
this.prop3 = obj.prop3;
}
Ma questo non è un bene, perché allora la mia costruttore avrebbe dovuto "sapere" prima che i nomi delle proprietà del parametro oggetto. Quello che vorrei è essere in grado di passare diversi oggetti come parametri e assegnare le loro proprietà direttamente come proprietà del nuovo oggetto personalizzato creato dal costruttore in modo da ottenere box.propX
e non box.obj.propX
. Spero di essere chiaro, forse sto misurando qualcosa di molto ovvio, ma sono un novizio quindi per favore hai bisogno del tuo aiuto!
Grazie in anticipo.
Una cosa notare che nessuna delle due soluzioni sta facendo una _ copia copy_. A seconda della tua implementazione _actual_, ci sono potenziali problemi. Ad esempio se invece di passare il tuo oggetto in modo anonimo tu crei una variabile 'obj = {prop1: ..., propDanger: {a: 1, b: 2}}' e passa al tuo costruttore 'var box = new Box (obj), quindi le modifiche successive a 'obj.propDanger.a' cambieranno anche' box.propDanger.a'. –
@Brett Buon punto. Raramente un problema, ma un buon pensiero per sapere in modo da non essere sorpreso da esso quando succede. – Hemlock