2012-03-23 21 views

risposta

20
<script> 
function mix(source, target) { 
    for(var key in source) { 
    if (source.hasOwnProperty(key)) { 
     target[key] = source[key]; 
    } 
    } 

} 

    mix(options, products); 
</script> 

UPDATE dopo 4 anni:

Ci sono una serie di opzioni migliori ora, con ES6 e ES7 ottenere comune

ES6 - questo sarà mutare objectToMergeTo

const combinedObject = Object.assign(objectToMergeTo, source1, source2) 

ES7 (sintassi bellezza con operatore di spread) - questa versione crea tuttavia una nuova istanza, non è possibile aggiungere un oggetto con operatore di spread.

const combined = { ...source1, ...source2 } 
+0

+1 per 'hasOwnProperty()'! Questo è il modo corretto per scorrere sulle proprietà di un oggetto. – jwueller

+0

Grazie, sei stato di grande aiuto! – lemon

+1

Peter, quella sintassi ES7 sembra creare un terzo oggetto che contiene i due oggetti nel loro insieme, piuttosto che le loro proprietà – TheEnvironmentalist

5

Si potrebbe fare questo:

for(var key in options) { 
    products[key] = options[key]; 
} 

che unisse in modo efficace le variabili dei due oggetti.

+0

Manca un controllo 'hasOwnProperty' e genererà risultati imprevisti, a seconda dei due oggetti. Inoltre, creerà una variabile globale 'key', che è cattiva. Usa sempre la parola chiave 'var'! – jwueller

+0

Risolto il problema della variabile globale, grazie per averlo indicato. –

0
var options = { 
    underscored: true 
}; 
var products = { 
    foo: 'bar' 
}; 
products.underscored = options.underscored; 
alert(products.underscored+":"+products.foo); 

put citazioni in tutto il 'bar' per renderlo in realtà hanno un valore, punti e virgola e var sugli oggetti, ma si ottiene il punto.

EDIT: anche degno di nota;

products.options = options; 
alert(products.options.underscored);//alerts true 
0

è possibile utilizzare jquery.extend (prodotti, opzioni). jQuery.extend combina due oggetti, supera i valori dell'elemento corrispondente nell'oggetto di destinazione e restituisce l'oggetto risultante. Per ulteriori informazioni: http://api.jquery.com/jquery.extend/

Problemi correlati