在JS中克隆对象时的“新”关键字

时间:2013-03-10 21:54:46

标签: javascript

我希望以下代码能够正常运行 - 我想要一个没有递归的克隆。

它没有...

为什么,我该怎么做才能解决它?

person=new Object();
person.firstname="John";
person2 = new person; //Expected a new person object with firstname john    

"TypeError: object is not a function"

相同
person2 = new person()

2 个答案:

答案 0 :(得分:3)

Javascript中的new运算符应用于函数,以创建一个新对象,其中原型链应用于新对象。您无法直接将其应用于对象。

如果你想在javascript中克隆一个对象,这不是一个简单的过程。您可以查看此答案以获取可能性列表:How do I correctly clone a JavaScript object?。最简单的方法是使用jQuery和$ .extend。但您也可以编写一个通用的Javascript解决方案。如果您只想将它​​用于特定类型的对象,则可能相当简单。

如果要正确使用new,可以创建像这样的构造函数

var Person = function() {
 this.firstname = "John";
};
var person1 = new Person();
var person2 = new Person();

这将创建2个新的Person个对象,彼此独立。

答案 1 :(得分:1)

var Person = function() {
 this.firstname = 'John';
};

person2 = new Person();

抛出的错误为您提供了有价值的信息(在JavaScript中很少见) - 在将函数应用于函数时,您只能使用new运算符,而不是任何其他对象。