在JavaScript中克隆对象与使用新关键字

在JavaScript中克隆对象与使用新关键字,javascript,Javascript,我正在阅读一本关于Javascript的教科书,这里有一个对象的浅层克隆与深度克隆的例子 谁能给我举个例子,为什么我想克隆一个对象而不是使用“new”关键字 例如,在一个简单的游戏中,如果我有10个敌人对象,我会创建一个名为“敌人”的构造器,并使用“new”关键字创建新的敌人 新操作符根据类/函数中提到的细节创建对象的实例。现在假设您已经创建了一个对象,并更改/添加了一些属性。 下次使用new关键字时,将不会得到上面所做的更改。克隆实际上会给您一个具有更改值的新对象 让我们举一个例子: func

我正在阅读一本关于Javascript的教科书,这里有一个对象的浅层克隆与深度克隆的例子

谁能给我举个例子,为什么我想克隆一个对象而不是使用“new”关键字


例如,在一个简单的游戏中,如果我有10个敌人对象,我会创建一个名为“敌人”的构造器,并使用“new”关键字创建新的敌人

新操作符根据类/函数中提到的细节创建对象的实例。现在假设您已经创建了一个对象,并更改/添加了一些属性。 下次使用new关键字时,将不会得到上面所做的更改。克隆实际上会给您一个具有更改值的新对象

让我们举一个例子:

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个“敌人”对象。在游戏中的某个时候,你可能已经为那些敌人设置了一些属性。如果使用“新建”操作符,这些更改将不会反映在新对象中。但是,如果您克隆了敌人对象,您将获得一个新对象以及之前所做的更改

如果您对浅拷贝与深拷贝感兴趣,可以在

函数克隆(obj){返回JSON.parse(JSON.encode(obj));}