我有一个函数
function Person(name){
this.name = name;
return this;
}
alert(Person("somename"));
这是返回[Object Window],我们如何将其更改为[object object]?有什么办法可以改变这个函数来获取[object object]而不改变签名。
最佳答案
在 Javascript 中,当您调用函数时,如下所示:
Person("somename")
该函数调用中的 this
指针设置为全局对象或 undefined
(如果在严格模式下运行)。这就是您的声明中发生的情况:
alert(Person("somename"));
<小时/>
如果您希望 Person()
作为构造函数工作,自动为您创建一个新的 Person
对象,那么您必须包含 new
运算符如下:
alert(new Person("somename"));
然后,new
运算符创建该类型的一个新对象,然后调用构造函数,并将 this
指针设置为该新对象。这正是它的用途。此外,当使用带有 new
的构造函数时,无需return this
,因为这是自动为您完成的。
您可以在不使用 new
的情况下使您正在使用的表单正常工作,但随后您必须在 Person
函数中创建自己的对象,如下所示:
function Person(name){
var p = {}; // create an empty object
p.name = name; // assign the name field
return p; // return the newly created object
}
这样做有一些缺点,特别是 instanceof Person
无法正常工作,因此通常首选使用 new
运算符。我发现使用 new
还可以使代码更具可读性,因为当您创建新对象和仅调用函数时,它会更加明显。
关于javascript - 为什么构造函数(带有 "return this")返回 window 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25214535/