2015-03-08 12 views
7

zu erweitern Ich weiß, dass Gegenstände erstreckt, über die Best-Practice-Objekte in Underscore.js

_.extend(parent, child); 

Methode

erfolgt.

Ich habe verschiedene Orte im Web zu sehen, wo die Menschen Objekte in besonderer Weise in Underscore.js

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

Warum erweitern tun sie das tun?

Antwort

20

Nach dem Unterstrich documentation, Die api von _.extend Methode ist

_.extend(destination, *sources) 

Erste Probe

_.extend(parent, child); 

In diesem Beispielcode erweitern Sie die Eigenschaften von Child-Objekt zu Parent-Objekt. Hier wird das übergeordnete Objekt geändert.

zweite Probe

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

Falls Sie nicht wollen, das übergeordnete Objekt ändern, und immer noch wollen, sowohl die Eigenschaften von Eltern und Kind. Sie können dieses verwenden. Hier erweitern Sie das übergeordnete Objekt und das untergeordnete Objekt auf ein neues Objekt.

+0

Also wenn ich die erste Annäherung mehrmals mit verschiedenen Kindern benutze, werde ich einen Elternteil haben, der die ganze Funktionalität dieser verschiedenen Kinder hat. Recht? Das Gleiche mit dem zweiten Ansatz gibt mir ganz andere Objekte. – JustBasti

+0

Sie müssen nicht mehrmals aufrufen, Sie können n Argumente haben. U kann etwas wie _.extend (parent, child1, child2, chilld3, child4); Der Elternteil hat alle Eigenschaften von child1,2,3 und 4 –

2

Die extend-Methode von Underscore überschreibt das erste übergebene Argument. Aber meistens wollen Sie das nicht. Sie wollen nur ein anderes Objekt, wo die zweite mit der Methode der ersten erweitert wird.

Sie übergeben also ein leeres Objekt als das Containerobjekt für das Ergebnis.

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

5

Nehmen Sie dieses Beispiel:

myConfig = { name: 'bob' } 

yourConfig = { name: 'sam' } 

_.extend(myConfig, yourConfig); 

Nun myConfig verprügelt wird. Ich habe den ursprünglichen Wert von myConfig.name überschrieben, und ich kann es nie zurückbekommen.

Um zu bewahren myConfig und yourConfig, ich brauche beide in ein drittes Objekt zu kombinieren:

myConfig = { name: 'bob' } 

yourConfig = { name: 'sam' } 

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