2016-12-09 11 views
4

Um Eigenschaften eines Objekts durch ein anderes zu erben, während Sie mit JavaScript-Objekten umgehen, sehe ich oft Verwendung von _.clone, wo die Absicht war, ein Objekt mit Eigenschaften eines anderen Objekts zu erstellen, und dann würde es erweitert werden ._.extend vs _.clone in lodash

Warum können wir nicht einfach _.extend verwenden, was für die Erweiterung eines Objekts relevanter ist?

Bitte sagen Sie mir den Unterschied zwischen den beiden und warum können wir nicht _.extend anstelle von _.clone, die eine teure Operation ist.

+0

http://stackoverflow.com/questions/21851974/lodash-clone-and-clonedeep-behaviors – stasovlas

Antwort

3

_.extend mutiert das Objekt. _.clone erstellt eine Kopie von Werte, nicht von Referenz und ändert nicht das ursprüngliche Objekt. Bitte beachten Sie, dass _.extend lediglich ein Alias ​​für _.assignIn ist.

_.assignIn(object, [sources])

Hinweis: Diese Methode mutiert object.

https://lodash.com/docs/4.17.2#assignIn

Siehe auch documenation für _.clone:

https://lodash.com/docs/4.17.2#clone

+0

_.extend mutiert das tatsächliche Objekt und _.clone gibt eine Kopie des Objekts zurück. Warum können wir nicht eine Eltern-Kind-Beziehung (prototypische Erbschaft) zwischen den Objekten herstellen, so dass das Kind, wenn es keine Eigenschaft besitzt, es von Eltern und Erben übernimmt.Und damit können wir so viele Kinder und Eltern haben, anstatt das Objekt zu mutieren/zu klonen. Erzähl es mir bitte. – Madav

2

Wenn Sie _.extend() ein vorhandenes Objekt, , mutieren Sie das Objekt. Wenn Sie zuerst _.clone() es, das ursprüngliche Objekt bleibt unberührt.

Sie könnten natürlich ein leeres Objekt mit dem ursprünglichen Eigenschaften des Objekts und einige zusätzliche diejenigen, erstrecken, die auch das ursprüngliche Objekt unverändert lässt:

_.extend({}, originalObject, { 
    additionalProperty: "foo" 
}) 

Dies zu einem flachen Klon von originalObject sehr ähnlich funktioniert. Mit ES2015 können Sie dasselbe Ziel mit einfachem JavaScript und Object.assign() erreichen.


Zusätzlicher Lesestoff:

+0

_.extend mutiert das tatsächliche Objekt und _.clone gibt eine Kopie des Objekts zurück. Warum können wir nicht eine Eltern-Kind-Beziehung (prototypische Erbschaft) zwischen den Objekten herstellen, so dass das Kind, wenn es keine Eigenschaft besitzt, es von Eltern und Erben übernimmt. Und damit können wir so viele Kinder und Eltern haben, anstatt das Objekt zu mutieren/zu klonen. Erzähl es mir bitte. – Madav

+0

Könnten Sie mir bitte sagen .. – Madav