gpt4 book ai didi

javascript - 为什么构造函数(带有 "return this")返回 window 对象?

转载 作者:行者123 更新时间:2023-12-03 12:05:19 24 4
gpt4 key购买 nike

我有一个函数

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com