<分区>
我开始编写代码时假设:
person1 = person
会给我一个新的实例,它不会。 person1
实际上是对 person
的引用/指针。
person = {age : 2}
person1 = person;
person.age = 3;
alert(person1.age); //gives us 3.
如何在不更改太多代码的情况下创建新实例?我在对象、函数(方法?)和所有内容中有 300 行代码。不想重写为构造函数。
<分区>
我开始编写代码时假设:
person1 = person
会给我一个新的实例,它不会。 person1
实际上是对 person
的引用/指针。
person = {age : 2}
person1 = person;
person.age = 3;
alert(person1.age); //gives us 3.
如何在不更改太多代码的情况下创建新实例?我在对象、函数(方法?)和所有内容中有 300 行代码。不想重写为构造函数。
最佳答案
如果你想要一个新的实例,你需要克隆一个对象。
一种(浅层)克隆方法是使用 JSON.stringify
和 JSON.parse
。请注意,这不会正确复制方法:
var person1 = JSON.parse(JSON.stringify(person))
更准确地说,如果你想复制方法(等)。 this answer 演示了一种“优雅”的方式来做到这一点:
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = obj.constructor();
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
}
return copy;
}
话虽如此,克隆的方法有很多种。查看此 SO post 进行比较。
关于javascript - 创建对象的新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25160700/