2016-12-27 5 views
-2

私はJavascriptでテキストを読んでいますが、浅いクローニングとオブジェクトの深いクローニングの例があります。JavaScriptでのオブジェクトのクローニングと新しいキーワード

「new」キーワードを使用する代わりに、オブジェクトをクローンする理由を教えていただけますか?

たとえば、単純なゲームでは、敵オブジェクトが10個ある場合、「敵」というコンストラクタを作成し、「new」キーワードで新しい敵を作成します。

答えて

1

new演算子は、クラス/関数で説明されている詳細からオブジェクトのインスタンスを作成します。今度はオブジェクトを作成し、それにいくつかのプロパティを変更/追加したとします。 次回に新しいキーワードを使用すると、上記の変更は適用されません。クローニングは実際には、変更された値を持つ新しいオブジェクトを提供します。あなたは10 '敵' オブジェクトを作成した場合、あなたのケースでは

function Car() {} 
myCar = new Car(); 
console.log(myCar.color); // you'll get undefined 
myCar.color = "red"; 
console.log(myCar.color); // you'll get red 

// now create another object 
yourCar = new Car(); 
console.log(yourCar.color); // you'll still get undefined 

// if you clone 
yourCar = clone(myCar) // assume you have some clone method 
console.log(yourCar.color); // Now you'll get red 

に例を取ることができます。ゲームのある時点で、それらの敵オブジェクトのいくつかのプロパティを設定している可能性があります。 new演算子を使用すると、その変更は新しいオブジェクトに反映されません。しかし、敵オブジェクトを複製すると、以前に加えられた変更に加えて新しいオブジェクトが取得されます。

あなたは深いコピー対浅いコピーに興味があるなら、それはWhat is the difference between a deep copy and a shallow copy?

+1

機能クローン(OBJ)で答えています{JSON.parse(JSON.encode(OBJ))を返します;} –

関連する問題