Новый оператор создает экземпляр объекта из деталей, упомянутых в классе/функции. Теперь скажите, что вы создали объект и изменили/добавили к нему какое-то свойство. В следующий раз, когда вы используете новое ключевое слово, вы не получите изменений, сделанных выше. Клонирование действительно даст вам новый объект с измененными значениями.
Давайте рассмотрим пример:
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?
функции клона (OBJ) {вернуть JSON.parse (JSON.encode (OBJ));} –