2015-03-08 13 views

risposta

20

Secondo la sottolineatura documentation, l'API del metodo _.extend è

_.extend(destination, *sources) 

Primo campione

_.extend(parent, child); 

In questo esempio di codice, si stanno effettivamente estendendo le proprietà dall'oggetto figlio all'oggetto padre. Qui l'oggetto genitore viene modificato.

secondo campione

_.extend({}, parent, child); 

Nel caso in cui non si desidera modificare l'oggetto padre, e ancora voglia sia le proprietà di padre e figlio. Puoi usare questo. Qui si sta estendendo l'oggetto genitore e l'oggetto figlio a un nuovo oggetto.

+0

Quindi, se uso il primo approccio più volte con bambini diversi, avrò un genitore che ha tutte le funzionalità di quei bambini diversi. Destra? La stessa cosa con il secondo approccio mi dà oggetti completamente diversi. – JustBasti

+0

non devi chiamare più volte, puoi avere n di argomenti. U può fare qualcosa come _.extend (parent, child1, child2, chilld3, child4) ;. Quindi genitore avrà tutte le proprietà di child1,2,3 e 4 –

2

Il metodo di estensione di Underscore sovrascrive il primo argomento passato. Ma la maggior parte delle volte non lo vuoi. Vuoi solo un altro oggetto dove il secondo è esteso con il metodo del primo.

Quindi si passa un oggetto vuoto come oggetto contenitore per il risultato.

var grandChild = _.extend({}, parent, child);

5

Prendete questo esempio:

myConfig = { name: 'bob' } 

yourConfig = { name: 'sam' } 

_.extend(myConfig, yourConfig); 

Ora, myConfig è rovinati. Ho sovrascritto il valore originale di myConfig.name e non potrò mai riaverlo.

Per preservare myConfig e yourConfig, devo combinare entrambi in un oggetto 3:

myConfig = { name: 'bob' } 

yourConfig = { name: 'sam' } 

sharedConfig = _.extend({}, myConfig, yourConfig); 
Problemi correlati