2016-12-27 56 views
-2

我正在閱讀Javascript中的一本教科書,並且有一個淺層克隆與對象深層克隆的示例。克隆JavaScript中的對象與新的關鍵字

任何人都可以給我一個例子,爲什麼我想克隆一個對象,而不是使用'新'關鍵字?例如,在一個簡單的遊戲中,如果我有10個敵人物體,我會創建一個名爲'enemy'的構造函數,並使用'new'關鍵字創建新的敵人。

回答

1

新運算符根據類/函數中提到的細節創建對象的實例。現在說你已經創建了一個對象並且改變/添加了一些屬性。 下次您使用新關鍵字時,您將無法獲得上述更改。克隆實際上會給你一個新的對象與改變的值。

讓我們舉個例子:

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 

在你的情況,如果你已經創建10 '敵人' 的對象。在遊戲中的某個時候,你可能爲這些敵人設置了一些屬性對象。如果您使用new運算符,則這些更改不會反映到新對象中。但是,如果您克隆敵人對象,則會得到一個新對象以及之前所做的更改。

如果你有興趣在淺拷貝VS深層副本,它在What is the difference between a deep copy and a shallow copy?

+1

功能克隆(OBJ){回答返回JSON.parse(JSON.encode(OBJ));} –