2016-12-09 2 views
4

JavaScriptオブジェクトを扱う際にあるオブジェクトのプロパティを別のオブジェクトに継承するには、別のオブジェクトのプロパティを持つオブジェクトを作成することが意図されていたところで、しばしば_.cloneの使用法が表示されます。 。_.endend対lodashの_.clone

_.extendを使用すると、オブジェクトの拡張に関連するのはなぜですか。

私は2つの違いを教えてください。_.cloneの代わりに_.extendを使用できないのはなぜですか?これは高価な操作です。

+0

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

答えて

3

_.extendオブジェクトを変異させます。 _.cloneでコピーを作成し、参照ではなく、元のオブジェクトを変更します。 _.extendは、_.assignInの単なるエイリアスです。

_.assignIn(object, [sources])

:このメソッドは、objectを変異させます。

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

また_.cloneためdocumenationを参照してください。

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

+0

_.endendは実際のオブジェクトを変更し、_.cloneはオブジェクトのコピーを返します。むしろ、なぜオブジェクトが親子から継承し提供するように、オブジェクト間に親子関係(原型継承)を確立できないのでしょうか。そうすることで、オブジェクトを変異/複製するよりも、多くの子や親を持つことができます。教えてください。 – Madav

2

_.extend()既存のオブジェクトの場合は、オブジェクトを変更します。最初に_.clone()にすると、元のオブジェクトはそのまま残ります。

あなたはもちろんも変わらず、元のオブジェクトを残し、元のオブジェクトのプロパティといくつかの追加のもの、と空のオブジェクトを拡張できます。これはoriginalObjectのシャローコピーと非常に似ています

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

。 ES2015では、プレーンJavaScriptとObject.assign()で同じ目標を達成できます。


追加読書:

+0

_.endendは実際のオブジェクトを変更し、_.cloneはオブジェクトのコピーを返します。むしろ、なぜオブジェクトが親子から継承し提供するように、オブジェクト間に親子関係(原型継承)を確立できないのでしょうか。そうすることで、オブジェクトを変異/複製するよりも、多くの子や親を持つことができます。教えてください。 – Madav

+0

教えてください。 – Madav