2016-12-27 2 views
-2

Я читаю учебник по Javascript, и есть пример мелкого клонирования и глубокого клонирования объектов.клонирование объектов в JavaScript против нового ключевого слова

Может ли кто-нибудь дать мне пример, почему я хотел бы клонировать объект вместо того, чтобы использовать «новое» ключевое слово?

Например, в простой игре, если у меня есть 10 объектов противника, я бы создал конструктор под названием «враг» и создал новых врагов с ключевым словом «новое».

ответ

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 'врагов. В какой-то момент игры вы можете установить некоторые свойства для объектов-противников. Если вы используете новый оператор, эти изменения не отразятся в новом объекте. Однако, если вы клонируете объект врагов, вы получите новый объект вместе с изменениями, сделанными ранее.

Если вы заинтересованы в мелкой копии против глубокой копии, он ответил на What is the difference between a deep copy and a shallow copy?

+1

функции клона (OBJ) {вернуть JSON.parse (JSON.encode (OBJ));} –